此 C# 编译器行为是错误还是功能?

问题描述 投票:0回答:4

为什么下面的代码片段在 C# 中有效?这是编译器的功能还是错误?

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 嵌套类

c# inner-classes
4个回答
7
投票

这是合法的代码,但很古怪。如果你愿意的话,我可以在规范中找出有关名称解析的部分 - 但这绝对是合法的。我之前曾与埃里克·利珀特(Eric Lippert)讨论过类似的话题。奇怪的是,它也使用了 D.B.B.B.B...。

对话的出现是由于 之前的问题

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


4
投票
  1. D 是 A
  2. A 有一个嵌套类型 B
  3. B 是 A
  4. 转到2

1
投票

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


1
投票

请注意,代码分析指南指出 嵌套类型不应该可见

© www.soinside.com 2019 - 2024. All rights reserved.