c# - 为什么嵌套类是 "inherited"?

标签 c# .net inheritance nested-class

考虑以下代码示例:

class Outer
{
    public class Nested { }
}

class SubOuter : Outer { }

class Test
{
    Test()
    {
        Outer.Nested x;     // Makes sense.
        SubOuter.Nested y;  // Compiles, but why?
    }
}

看起来嵌套类被子类“继承”了。那有什么意义呢?我可以用这个我不能(或不能轻易)做的功能做什么? Outer.NestedSubOuter.Nested 不是完全等价的吗?

澄清:它当然可以编译,因为 C# 规范这么说。我明白那个。我在问为什么 C# 是这样设计的,因为它似乎没有添加 到语言中。如果您有相反的例子,即一些代码通过使用此功能变得更容易/更短/更好,请在答案中分享它,我很乐意接受。

最佳答案

Test 的角度来看 Nested 只是一个标识符,就好像它是一个成员 e.g.因为它是 public 您可以在任何地方访问它,您可以访问任何类 OuterSubOuter。然而,这两种用法是相同的,它们标识相同的类。

你甚至可以引用另一个:

Outer.Nested x = new Outer.Nested(); 
SubOuter.Nested y = x;

甚至

Outer.Nested x = new SubOuter.Nested();
SubOuter.Nested y = x;

然而,正如您在调试器中看到的那样,xy 共享对 Outer.Nested 的引用,而不是 SubOuter。嵌套

编辑:正如其他人已经提到的,这不是 功能,它只是对类内成员的常规处理。因此,它肯定不会给语言带来任何好处,因为您描述的功能根本不存在。因此,这遵循 Principle of least astonishment .

然而,以不同方式处理嵌套类将是一项新功能。

关于c# - 为什么嵌套类是 "inherited"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34761303/

相关文章:

inheritance - TypeScript,Angular 2 依赖注入(inject)与继承

c++ - 将方法添加到与继承方法同名的子类

c# - xaml ObjectDataProvider.MethodParameters 引用

c# - 在分页符上将 WPF TableRow 元素保持在一起

c# - 读取 NLog 创建的日志文件并同时写入

.net - 使用 vb.net 对大型 Excel 文件执行 SQL 查询的最佳方法是什么?

c++ - 三法则与继承

c# - 使项目在多个 .NET 版本之间保持同步

c# - 桌面 VB.NET <> C# 转换器

c# - 非静态类比静态类有什么优势?