在C#中,Java的默认(包)访问权限相当于什么?

在C#中,Java的默认(包)访问权限相当于什么? 有吗? 反正是否限制对特定命名空间的访问?

问题:

我试图限制对某些方法的访问仅限于我的NUnit测试 – 在JUnit中我会通过使方法包访问并在同一个包中但在src / test / java而不是src / main / java下进行测试来实现这一点。 如何在C#中实现类似的function?

注意:我不能将方法设置为internal因为我的测试是在一个单独的程序集中 – 就像NUnit约定一样 – 或者是它?

C#没有包级别或命名空间级别访问权限 – 只有程序集级别 – 也称为内部访问权限。

但是,您可以将方法设置为内部,并使用InternalsVisibleTo属性将它们公开给unit testing程序集。

你可能会发现阅读这篇文章和这篇文章很有用。

没有什么是完全相同的。 internal关键字是close,但它受程序集限制,而不是命名空间。

如果某些内容被标记为内部,则只能通过同一程序集中的代码访问它(dll,exe)

另一种方式却截然不同。 你可以像这样使用部分类 :

  1. 文件#1 =正在测试的代码。 写的就像正常但有’部分’关键字
  2. 文件#2 =unit testing,包含一个嵌套类,它是实际的unit testing。

嵌套类可以访问其父类中的所有内容(包括私有方法)。 作为构建过程的一部分(可能是MSBuild或NAnt脚本),只是不要将测试编译为最终程序集的一部分,并且测试中的代码将正常工作。

您可以通过将方法设置为内部来限制方法仅在其程序集中可见