【发布时间】:2016-01-13 08:05:07
【问题描述】:
考虑以下代码示例:
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# 是这样设计的,因为它似乎没有向语言添加 东西。如果您有相反的示例,即使用此功能变得更容易/更短/更好的代码,请在答案中分享,我很乐意接受。
【问题讨论】:
-
因为
Nested是公开的,所以SubOuter类可以在基类中看到。 -
问题出在哪里,为什么不想编译。
-
Outer.Nested和SubOuter.Nested是等价的,除了声明的方式外没有区别。 -
不,您是在 要求 一项新功能。基类的所有公共成员都可以通过继承类访问。为什么 classes 应该被区别对待,例如方法,为什么编译器团队必须专门添加代码来防止您进行此类访问? (然后将错误消息翻译成各种语言,记录下来等)
-
它更接近于“不继承类的公共非实例成员将完全违背人们的期望。”。至少这是我所期望的。除此之外,它可能还会有相当大的实施成本。
标签: c# .net inheritance nested-class