【问题标题】:Is this C# compiler behaviour a bug or a feature?这个 C# 编译器行为是错误还是功能?
【发布时间】:2009-04-01 21:43:08
【问题描述】:

为什么下面的代码 sn-p 在 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

【问题讨论】:

  • 我不明白,为什么您包含 C 类。我认为如果您将其删除,问题将是相同的(并且会更短一些)...
  • 因为 C 继承自没有“显式”子类的子类。以自己的方式很奇怪。

标签: c# compiler-construction


【解决方案1】:

这是合法的代码,但很古怪。如果你愿意,我可以在规范中挖掘出关于名称解析的内容——但这绝对是合法的。我之前和 Eric Lippert 就类似的话题进行过交谈。奇怪的是,它也使用了 D.B.B.B.B...。

由于this earlier question而进行了对话。

C# 3.0 规范的相关部分是 3.8,但它太长且涉及内容太长,不值得在这里发布。

【讨论】:

    【解决方案2】:
    1. D 是 A
    2. A 有一个嵌套类型 B
    3. B 是 A
    4. 转到 2

    【讨论】:

      【解决方案3】:

      这很有趣。不过,我不知道这会造成什么伤害。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-04-08
          • 2012-09-28
          • 2013-05-08
          • 2015-01-20
          • 1970-01-01
          • 2011-08-03
          • 2021-02-08
          相关资源
          最近更新 更多