在C#中,Java的默认(包)访问权限相当于什么?有吗?反正是否限制对特定命名空间的访问?
问题:
我正在尝试将对某些方法的访问权限限制在我的NUnit测试中 - 在JUnit中我会通过使方法包访问并在同一个包中进行测试但在src / test / java而不是src /下执行此操作主/ JAVA。如何在C#中实现类似的东西?
注意:我不能创建方法internal
,因为我的测试是在一个单独的程序集中 - 就像NUnit约定一样 - 或者是它?
答案 0 :(得分:23)
C#没有包级别或命名空间级别访问权限 - 只有程序集级别 - 也称为internal访问权限。
但是,您可以将方法设置为内部,并使用InternalsVisibleTo属性将它们公开给单元测试程序集。
答案 1 :(得分:1)
没有什么是完全相同的。 internal关键字很接近,但它受到程序集的限制,而不是名称空间。
如果某些内容被标记为内部,则只能通过同一程序集中的代码访问它(dll,exe)
答案 2 :(得分:1)
另一种方式却截然不同。你可以这样使用partial classes:
嵌套类可以访问其父类中的所有内容(包括私有方法)。作为构建过程的一部分(可能是MSBuild或NAnt脚本),只是不要将测试编译为最终程序集的一部分,并且测试中的代码可以正常工作。
答案 3 :(得分:0)
您可以通过将方法设置为内部
来限制方法仅在其程序集中可见