我们知道Modifier为Internal的类型成员仅限于当前程序集能够访问,但是在某些情况下,我们希望将它们暴露给另一个程序集。比较典型的应用场景包括如下两种:

  • 将一个组件或者模块定义成两个或者两个以上程序集,一个程序集需要访问另一个程序集的Internal成员。比如将一个Logging组件定义成三个程序集:Logging.dll、Logging.Client.dll和Logging.Server.dll。其中后两个分别用于客户端和服务端的日志记录,而它们共同依赖的功能定义在Logging.dll中。定义在Logging.dll的API以共有成员的形式公布出来,而一些仅仅需要被Logging.Client.dll和Logging.Server.dll使用的API在定义成Interna成员。
  • 对一个组件或者模块进行单元测试时候,单元测试用例需要调用定义在被测试组件或者模块的Internal成员当InternalsVisibleToAttribute特性遭遇"强签名"

举个例子,如右图所示,我将某个组件定义在Lib项目中,而Test是与之对应的单元测试项目。定义在Lib中组建成员的可见性依赖于具体的设计,但是在很多情况下,单元测试用例为了尽可能覆盖较多的分支,需要调用一些Internal成员。比如,设置一些Internal属性,或者调用一些Internal方法。

我在Lib中定义了如下一个表示二维向量的Vector类,其中X和Y属性的Set方法为Internal

class Vector
   2: {
string parameterName)
   4:     {
value)
   6:         {
new ArgumentNullException(parameterName);
   8:         }
   9:     }
internal set; }
internal set; }
  12:  
double y)
  14:     {
this.X = x;
this.Y = y;
  17:     }
  18:  
object obj)
  20:     {
as Vector;
null == vector)
  23:         {
false;
  25:         }
  26:  
this.Y == vector.Y;
  28:     }
  29:  
operator + (Vector v1, Vector v2)
  31:     {
);
);
new Vector(v1.X + v2.X, v1.Y+ v2.Y);
  35:     }
  36:  
int GetHashCode()
  38:     {
this.Y.GetHashCode();
  40:     }
  41: }

相关文章:

  • 2022-01-24
  • 2022-12-23
  • 2021-12-28
  • 2022-12-23
  • 2022-01-17
  • 2021-11-27
  • 2021-08-07
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-11-25
  • 2021-06-22
  • 2022-12-23
  • 2022-12-23
  • 2021-09-11
相关资源
相似解决方案