为什么以下代码段在C#中有效?这是编译器的一个特性还是一个bug?
class A
{
public class B : A
{
}
}
class C : A.B
{
public void Foo(C.B b)
{
}
}
class D : A
{
public void Foo(D.B.B.B.B b)
{
}
}
答案 0 :(得分:7)
这是合法的代码,但很古怪。如果你愿意,我可以在规范中挖掘出关于名称解析的一点 - 但这绝对是合法的。我之前和Eric Lippert谈过类似的话题。奇怪的是,那也是D.B.B.B.B ......。
由于this earlier question,对话出现了。
C#3.0规范的相关部分是3.8,但它太长了,值得在这里发布。
答案 1 :(得分:4)
答案 2 :(得分:1)
这很有趣。不过,我不知道它会有什么危害。
答案 3 :(得分:1)
请注意,代码分析指南指出nested types should not be visible。