Private Class 中财产的访问级别

Posted

技术标签:

【中文标题】Private Class 中财产的访问级别【英文标题】:Access level of property in Private Class 【发布时间】:2014-01-13 22:32:38 【问题描述】:

对于 Private Class,我应该将我的属性声明为 Public 还是 Friend(在 c# 中是内部的)? 除了父类之外,任何其他类都无法访问我的私人类。

【问题讨论】:

父类是什么意思?你的类是嵌套在一个类中还是什么? 是的是嵌套类 无论如何它们都是私有的(因为该类被声明为私有的,这将取代其他所有内容)。所以在这种情况下你可以忘记它。 @ThomasWeller,反正他们不会是私人的!因为类是嵌套的,所以父级可以访问公共和内部成员。 【参考方案1】:

一般来说,尽量保持封装完好无损。您的类之间的关系应该基于“需要知道”。

由于我不熟悉您的应用程序设计,我确信我过于简单化了,但我会问自己以下问题:

父类是唯一需要知道子类的类吗?如果是,应该是private

如果不是,是否所有其他需要知道子类的实体都在同一个项目中?如果是这样,它应该是internal

如果项目外部有实体需要了解子类,则应为public

关于属性。如果您决定使用子类private,则创建属性public 是没有用的。 唯一可以拥有该类实例的对象是父类,它在同一个项目中,因此internal 对于属性应该足够了。

注意 C# 没有 friend 修饰符。取而代之的是,您可以使用internal,或最相似但不那么优雅的选项:InternalsVisibleTo

【讨论】:

C# 内部 == VB 朋友。 @lomed 这不是真的。 friend 指定该类只能由特定类 ONE 访问。 internal 指定该类可由程序集中的 ANY 类访问。 @lomed 是否愿意指出文档中的相关部分?它与internal 无关,并且在VB 中有friend 的示例,在C# 的同一上下文中不存在 第一部分:指定一个或多个已声明的编程元素只能从包含其声明的程序集中访问。 另请参阅Keyword Comparison in Wikipedia @lomed 根据您的评论修改【参考方案2】:

既然你的类(嵌套类)是private,唯一可以访问它的就是它的容器(基类或父类)。在这种情况下,publicinternal(VB 中的Friend)没有任何区别,因为唯一可以访问嵌套类的是它的父类。 一般来说,如果有一天您想将访问修饰符更改为public,那么现在就可以预见它并在internalpublic 之间进行选择。很简单,如果您希望嵌套类的成员仅在其定义的程序集中可见,请使用internal,否则请考虑使用public

【讨论】:

以上是关于Private Class 中财产的访问级别的主要内容,如果未能解决你的问题,请参考以下文章

[ Java学习基础 ] Java的封装性与访问控制

四类与对象

第四十四课继承中的访问级别

java类的访问级别

抽象和接口

public等访问修饰符和final,static的用法