Java 在 C# 中的默认(包)访问等价物是什么?有吗?无论如何限制对特定命名空间的访问?
问题:
我试图限制对某些方法的访问仅限于我的 NUnit 测试 - 在 JUnit 中,我将通过使方法包访问并在同一个包中但在 src/test/java 而不是 src/main/java 下进行测试来做到这一点. 如何在 C# 中实现类似的功能?
注意:我无法创建这些方法internal
,因为我的测试在单独的程序集中——就像 NUnit 约定一样——或者是吗?
Java 在 C# 中的默认(包)访问等价物是什么?有吗?无论如何限制对特定命名空间的访问?
问题:
我试图限制对某些方法的访问仅限于我的 NUnit 测试 - 在 JUnit 中,我将通过使方法包访问并在同一个包中但在 src/test/java 而不是 src/main/java 下进行测试来做到这一点. 如何在 C# 中实现类似的功能?
注意:我无法创建这些方法internal
,因为我的测试在单独的程序集中——就像 NUnit 约定一样——或者是吗?
C# 没有包或命名空间级别的访问 - 只有程序集级别 - 这也称为内部访问。
但是,您可以将您的方法设置为内部方法并使用InternalsVisibleTo属性将它们公开给您的单元测试程序集。
没有什么是完全等价的。internal关键字很接近,但它受程序集限制,而不是名称空间。
如果某些内容带有 internal 标记,则只能由同一程序集中的代码(dll、exe)访问
还有另一种截然不同的方式。您可以像这样使用部分类:
嵌套类可以访问其父类中的所有内容(包括私有方法)。作为构建过程的一部分(可能是 MSBuild 或 NAnt 脚本),不要将测试作为最终程序集的一部分进行编译,被测代码可以正常工作。
您可以通过将方法设置为内部来限制方法仅在其程序集中可见