何时使用“受保护的内部”访问修饰符?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

正如你可能已经知道,.NET框架的内部保护的访问修饰符工作在一种奇怪的方式:这并不意味着类是保护 内部,它说,类保护 内部 ; 也就是说,修改过的类或成员可以通过相同的程序集以及相同的层次结构进行访问。

所以,知道这一点:你什么时候使用它?你能给个例子吗?.NET Base Class Library中是否有一个很好的照明用法示例?

提问于
用户回答回答于

我很少需要使用这种访​​问修饰符组合,因为我认为除了最极端的情况外,它都是糟糕设计的一个指标。然而,有时需要像类型转换器和编辑器这样的辅助类访问程序集内的方法,但只允许派生类在其他用例中访问它。

一个示例可能是将类型转换为类型转换器的字符串的调用。ToString()通常不会用于此目的,因此您可能需要ToPersistableString()打电话让您的类型转换器使用,因此您可以使用它internal。然后,你决定从你的类派生出来的人可能很希望将这个调用作为他们派生类的持久化方案的一部分,这样你就可以做到这protected一点。

.NET Framework AccessibilityNotifyClientsControlis上使用protected internal。使用反射器,我可以看到,这样做,这样的CheckedItemCollectionCheckListBox变化检查状态时,就可以访问它。

用户回答回答于

我已经将它用于你希望能够在单独的名称空间中用于单元测试的内部方法,单元测试名称空间包含该类的一个子类。这允许访问受保护的方法。

这就是说有一个理由让所有的事情都公开进行单元测试。

扫码关注云+社区