gpt4 book ai didi

c# - 为什么在接口(interface)列表中的泛型内部使用私有(private)嵌套类型不是 "inconsistent accessibility"?

转载 作者:IT王子 更新时间:2023-10-29 04:50:14 24 4
gpt4 key购买 nike

如果标题不是完全不言自明的,下面是令我困惑的代码:

public interface IFoo<T>
{
}

public class MyClass : IFoo<MyClass.NestedInMyClass>
{
private class NestedInMyClass
{
}
}

我很惊讶这个编译没有错误。感觉我在暴露一个private类型。 这不应该是违法的吗?

也许您的答案只是“没有反对的规则,那为什么不可以呢?”也许同样令人惊讶的是 MyClass.NestedInMyClass甚至在“范围内”。如果我删除 MyClass.资格,它不会编译。

(如果我将 IFoo<> 更改为通用,它应该成为 MyClass 的基类,这非法的,因为基类型必须是至少与类型本身一样易于访问。)

我用 Visual Studio 2010 的 C# 4 编译器试过了。

最佳答案

没有外部代码可以将对象转换到此接口(interface),因此这不是可访问性问题。

public 类甚至可以实现privateinternal 接口(interface)——同样,实际上没有cast发生在外部代码中。

回复:关于依赖于 T 的实现的讨论 - 如果你使用显式接口(interface)实现,你将被允许 - 因为接口(interface)的方法在那种情况下实际上是私有(private)的。例如:

public interface IFoo<T>
{
void DoStuff(T value);
}

public class MyClass : IFoo<MyClass.NestedInMyClass>
{
void IFoo<MyClass.NestedInMyClass>.DoStuff(MyClass.NestedInMyClass value)
{
}
private class NestedInMyClass
{
}
}

有效(因为接口(interface)实现方法未由类本身公开)。

关于c# - 为什么在接口(interface)列表中的泛型内部使用私有(private)嵌套类型不是 "inconsistent accessibility"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14199117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com