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

时间:2009-04-01 21:43:09

标签: 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)
    {

    }
}

另请参阅

  

.NET Nested Classes

4 个答案:

答案 0 :(得分:7)

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

由于this earlier question,对话出现了。

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

答案 1 :(得分:4)

  1. D是A
  2. A具有嵌套类型B
  3. B是A
  4. GOTO 2

答案 2 :(得分:1)

这很有趣。不过,我不知道它会有什么危害。

答案 3 :(得分:1)

请注意,代码分析指南指出nested types should not be visible