考虑以下代码示例:
class Outer
{
public class Nested { }
}
class SubOuter : Outer { }
class Test
{
Test()
{
Outer.Nested x; // Makes sense.
SubOuter.Nested y; // Compiles, but why?
}
}
看起来嵌套类被子类“继承”了。那有什么意义呢?我可以用这个我不能(或不能轻易)做的功能做什么? Outer.Nested
和 SubOuter.Nested
不是完全等价的吗?
澄清:它当然可以编译,因为 C# 规范这么说。我明白那个。我在问为什么 C# 是这样设计的,因为它似乎没有添加 到语言中。如果您有相反的例子,即一些代码通过使用此功能变得更容易/更短/更好,请在答案中分享它,我很乐意接受。
最佳答案
从 Test
的角度来看 Nested
只是一个标识符,就好像它是一个成员 e.g.因为它是 public
您可以在任何地方访问它,您可以访问任何类 Outer
或 SubOuter
。然而,这两种用法是相同的,它们标识相同的类。
你甚至可以引用另一个:
Outer.Nested x = new Outer.Nested();
SubOuter.Nested y = x;
甚至
Outer.Nested x = new SubOuter.Nested();
SubOuter.Nested y = x;
然而,正如您在调试器中看到的那样,x
和 y
共享对 Outer.Nested
的引用,而不是 SubOuter。嵌套
。
编辑:正如其他人已经提到的,这不是新 功能,它只是对类内成员的常规处理。因此,它肯定不会给语言带来任何好处,因为您描述的功能根本不存在。因此,这遵循 Principle of least astonishment .
然而,以不同方式处理嵌套类将是一项新功能。
关于c# - 为什么嵌套类是 "inherited"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34761303/