14

我正在学习 C# 并且来自 Java 世界,看到 C# 没有“私有包”我有点困惑。我看到的关于这方面的大多数评论都是“你不能这样做;语言不是这样设计的”。我还看到了一些变通方法,这些变通方法涉及internalpartial伴随着评论说这些变通方法违背了语言的设计。

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

4

2 回答 2

32

internal是你所追求的。这意味着该成员可以被同一程序集中的任何类访问。将它用于此目的(产品和产品实例)没有任何问题,并且是它的设计目的之一。C# 选择不使命名空间变得重要——它们用于组织,而不是确定哪些类型可以相互看到,就像在带有包 private的 java 中一样。

partial一点也不像internal or package private。它只是一种将类的实现拆分为多个文件的方法,并提供了一些可扩展性选项以作为良好的衡量标准。

于 2011-02-11T01:59:33.527 回答
9

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

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

于 2011-02-11T02:02:28.260 回答