为什么C#没有包私有?
我正在学习C#并来自Java世界,我有点困惑,看到C#没有“包私有”。 我见过的大多数评论都是“你不能这样做;语言不是这样设计的”。 我还看到了一些涉及internal
和partial
解决方法,以及评论说这些变通方法违背了语言的设计。
为什么C#这样设计? 另外,我将如何执行以下操作:我有一个Product
类和一个ProductInstance
类。 我想要创建ProductInstance
的唯一方法是通过Product
类中的工厂方法。 在Java中,我将ProductInstance
放在与Product
相同的包中,但将其构造函数package private
设为package private
以便只有Product
才能访问它。 这样,任何想要创建ProductInstance
都只能通过Product
类中的工厂方法执行此操作。 我如何在C#中完成同样的事情?
internal
是你所追求的。 这意味着该成员可由同一程序集中的任何类访问。 将它用于此目的(Product&ProductInstance)没有任何问题,并且是它的设计之一。 C#选择不使命名空间显着 – 它们用于组织,而不是确定哪些类型可以看到彼此,如在包含私有的 java中。
partial
是没有任何东西像internal
或 package private
。 它只是一种将类的实现拆分为多个文件的方法,并提供了一些可扩展性选项。
包实际上并不像在Java中那样存在。 命名空间用于组织代码并防止命名冲突,但不用于访问控制。 项目/程序集可用于访问控制,但您不能像使用程序包那样嵌套项目/程序集。
使用internal
来隐藏一个项目的成员与另一个项目的成员。