为什么 C# 没有包私有?

2022-09-03 16:59:20

我正在学习C#,来自Java世界,看到C#没有“包私有”,我有点困惑。我看到的大多数关于此的评论都相当于“你不能这样做;语言不是这样设计的”。我还看到了一些涉及的解决方法,以及评论说这些解决方法与语言的设计背道而驰。internalpartial

为什么 C# 是这样设计的?另外,我该如何做这样的事情:我有一个类和一个类。我想要创建的唯一方法是通过类中的工厂方法。在Java中,我会放入与 相同的包,但使其构造函数仅有权访问它。这样,任何想要创建 a 的人都只能通过类中的 factory 方法执行此操作。如何在C#中完成同样的事情?ProductProductInstanceProductInstanceProductProductInstanceProductpackage privateProductProductInstanceProduct


答案 1

internal是你所追求的。这意味着该成员可由同一程序集中的任何类访问。将它用于此目的(Product & ProductInstance)没有错,并且是它设计的目的之一。C# 选择不使命名空间变得重要 - 它们用于组织,而不是确定哪些类型可以相互查看,就像在具有包私有的Java中一样。

partial根本不像 .它只是一种将类的实现拆分为多个文件的方法,并引入了一些扩展性选项以进行良好的度量。internalpackage private


答案 2

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

用于对另一个项目隐藏一个项目的成员。internal


推荐