什么是Java的默认在C#(包)访问的相同呢?(What is the equivalent of

2019-08-02 12:53发布

什么是Java的默认在C#(包)访问的相同呢? 是否有一个? 反正是有限制访问特定的命名空间?

问题:

我试图限制访问某些方法只是我的NUnit的测试 - 在JUnit中我会通过使方法包访问,并且具有在同一个包,但在src / test / java下代替的src / main / java的测试做到这一点。 我怎样才能实现在C#中类似的东西?

注:我不能让这些方法internal ,因为我的测试是在单独的程序-这是NUnit的约定-或者是什么呢?

Answer 1:

C#不具有包或命名空间级别的访问-仅装配水平-其也被称为内部访问。

但是,你可以让你的方法内部和使用InternalsVisibleTo属性来揭露他们的单元测试组件。

您可能会发现它有用的阅读这篇文章, 这一个 。



Answer 2:

没有什么那是完全等效。 该内部关键字是接近的,但它通过组装的限制,而不是命名空间。

如果某些被标记有内部,它只能通过代码相同的组件内访问(DLL,EXE)



Answer 3:

还有另一种是完全不同的方式。 您可以使用局部类 ,像这样:

  1. 文件#1 =下测试代码。 恰恰像正常的,但与“部分”关键字
  2. 文件#2 =单元测试,包含嵌套类,它是实际的单元测试。

嵌套类有机会获得一切都在他们的父类(包括私有方法)。 作为您的构建过程(可能的MSBuild或楠脚本)的一部分,只是不编译测试,最后组装的一部分,该代码被测会工作得很好。



Answer 4:

你可以限制方法,通过使它们内部只有在其组装可见



文章来源: What is the equivalent of Java's default (package) access in C#?