这个C#编译器行为是一个错误还是一个功能?

Pra*_*ter 2 c# compiler-construction

为什么以下代码段在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)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

也可以看看

.NET嵌套类

Jon*_*eet 7

这是合法的代码,但很古怪.如果你愿意,我可以在规范中挖掘出关于名称解析的一点 - 但这绝对是合法的.我之前和Eric Lippert谈过类似的话题.奇怪的是,那也使用了DBBBB ..

由于这个早先的问题,谈话出现了.

C#3.0规范的相关部分是3.8,但它太长并且值得在这里发布.