C# 访问父级';通过C中的嵌套类型创建私有属性#

C# 访问父级';通过C中的嵌套类型创建私有属性#,c#,.net,nested,nested-class,C#,.net,Nested,Nested Class,C#中的嵌套类型能够访问父级的私有属性。有这种语言功能的具体原因吗?在我看来,这打破了封装。如果我将嵌套类型设置为公共类型,那么我将能够通过它公开父类的私有属性。您可以这样做,但您只能将该类嵌套在与外部类相同的源文件中 实际上,嵌套类由外部类“拥有”,并且与外部类的任何其他成员的信任程度相同。外部类中的方法也可以公开私有属性,但您不相信它,因为您拥有所有这些代码。同样,您(外部类的作者)拥有嵌套类的所有代码。如果不想破坏嵌套类中的封装,请避免编写会破坏封装的代码:)嵌套类是封闭类的一部分,就像方

C#中的嵌套类型能够访问父级的私有属性。有这种语言功能的具体原因吗?在我看来,这打破了封装。如果我将嵌套类型设置为公共类型,那么我将能够通过它公开父类的私有属性。

您可以这样做,但您只能将该类嵌套在与外部类相同的源文件中


实际上,嵌套类由外部类“拥有”,并且与外部类的任何其他成员的信任程度相同。外部类中的方法也可以公开私有属性,但您不相信它,因为您拥有所有这些代码。同样,您(外部类的作者)拥有嵌套类的所有代码。如果不想破坏嵌套类中的封装,请避免编写会破坏封装的代码:)

嵌套类是封闭类的一部分,就像方法一样。通过它们公开私有属性不会像通过方法公开私有属性那样破坏封装

C#用于访问控制的模型是,您可以在定义的类中访问任何您想要的内容,很难看出它是如何以其他方式工作的。

(IMO)嵌套类型是封闭类型的一部分,因此它应该可以访问
private
成员,就像该类型的任何其他部分一样

就像将类型的任何其他部分设置为公共的一样,这也可能会公开该类型的私有属性


因为只有编写封闭类型的人才能编写嵌套类型,所以没有真正的风险?

错误设计的可能性是无穷的;不过,没有什么强迫你使用它们。我为我发布了与@Jon Skeet相同的东西感到自豪,尽管有点不那么雄辩,仅仅38秒之后:)谢谢Jon。这就把事情弄清楚了。有趣的是,我在阅读了你书中的一段代码片段后提出了这个问题。我认为你也可以通过分部类将外部类拆分为两个源文件,让其中一个源文件只包含嵌套类,而另一个源文件包含其他所有内容。这是一种滥用部分阶级的行为;我建议不要这样做。