53

在 java 中,您有包级别的保护,可确保类仅在包中可用。

C# 中的命名空间或多或少类似于包。但是 C# 没有用于保护命名空间中的类的保护级别。

这有什么具体原因吗?

4

3 回答 3

33

没有这样的访问修饰符:最接近的修饰符是internal,但保护单元是类所在的程序集,而不是其命名空间。

有人可能会争辩说,使用 实现类似级别的控制是可能的internal,因为这两种限制都可以防止外人访问您的库的实现细节。唯一对它有影响的人是你,图书馆的作者,你完全可以控制要公开什么,要隐藏什么。从本质上讲,这意味着如果您不想在其命名空间之外使用某个类,只需避免使用它即可;如果类是internal,其他人也不能使用该类。

于 2013-08-27T14:18:22.687 回答
3

在 .NET 中有程序集(dll 或 exe 文件),您可以使用internal修饰符来限制仅在同一程序集中的访问

于 2013-08-27T14:19:44.507 回答
2

这有什么具体原因吗?

大多数情况下,这是因为包和命名空间之间存在一些关键差异

为了简化链接问题和此处已经说过的内容:C# 中的命名空间主要用于帮助组织程序集的内容,包括内部和外部。Java 包与 C# 程序集有更多共同点,C# 中有一个访问修饰符限制在程序集级别:internal

于 2013-08-27T14:34:26.807 回答