为什么C#没有包私有?

Viv*_*ath 11 c# java package-private

我正在学习C#并来自Java世界,我有点困惑,看到C#没有"包私有".我见过的关于这一点的大多数评论都是"你不能这样做;语言不是这样设计的".我还看到了一些涉及的工作区internal,partial以及评论说这些变通方法违背了语言的设计.

为什么C#这样设计?另外,我将如何做以下事情:我有一个Product班级和一个ProductInstance班级.我想要ProductInstance创建的唯一方法是通过类中的工厂方法Product.在Java中,我会放入ProductInstance相同的包Product,但是使它的构造函数package private只能Product访问它.这样,任何想要创建的人ProductInstance都只能通过类中的工厂方法来创建Product.我如何在C#中完成同样的事情?

Kir*_*oll 28

internal是你所追求的.这意味着该成员可由同一程序集中的任何类访问.将它用于此目的(Product&ProductInstance)没有任何问题,并且是它的设计之一.C#选择不使名称空间显着 - 它们用于组织,而不是确定哪些类型可以看到彼此,如在包含私有的 java中.

partial什么都不喜欢internal 或者 package private.它只是一种将类的实现拆分为多个文件的方法,并提供了一些可扩展性选项.


Mar*_*oms 8

包实际上并不像在Java中那样存在.命名空间用于组织代码并防止命名冲突,但不用于访问控制.项目/程序集可用于访问控制,但您不能像使用包一样拥有嵌套项目/程序集.

使用internal隐藏从另一个项目的成员.