【问题标题】:protected internal constructor in abstract classes抽象类中受保护的内部构造函数
【发布时间】:2013-11-13 16:45:28
【问题描述】:

来自 MSDN:Abstract Class Design

X 不要在抽象中定义公共或受保护的内部构造函数 类型。

√ 一定要在抽象中定义一个受保护的或内部的构造函数 类。

这里有矛盾吗?或者这是否意味着构造函数应该是或受保护的或内部的,但不能同时是受保护的和内部的?

【问题讨论】:

标签: .net oop constructor abstract-class msdn


【解决方案1】:

是的,这确实意味着构造函数不应同时受保护和内部,但受保护或内部都可以。受保护(和)内部与公共一样具有误导性,因为抽象类的构造函数只能从继承者调用。
单个受保护或内部会有所不同,因为它们允许不同范围的继承者(内部仅允许来自当前程序集的继承者,受保护允许任何继承者)。但是 public 将可访问性扩展到抽象类本质上可以提供的范围。受保护的内部只是为抽象类做一个受保护的。
这就是他们误导的原因。

【讨论】:

  • 还是不明白为什么不能同时进行内部和保护。内部可以在同一个程序集中访问,受保护的是来自继承者。如果你想在程序集中访问继承者,它应该是内部的并受到保护。
  • 好的,从这里:stackoverflow.com/questions/585859/…:它是两者的联合,而不是交集,因此同一程序集中的任何类以及其他程序集的任何继承者都可以访问受保护的内部。但为什么不呢?
  • 可以,但设计建议不要这样做,因为它不会添加任何有用的东西。对于非抽象类,可以使用内部构造函数从程序集中构造对象。在这种情况下,受保护的内部确实会有所作为,因为它既允许在程序集中进行构造,也允许从程序集外部的继承类进行访问。对于抽象类,实例化是不相关的,因此组合与单个受保护类没有区别。
猜你喜欢
  • 2010-11-08
  • 2016-06-19
  • 1970-01-01
  • 2013-08-29
  • 2015-11-17
  • 2019-11-18
  • 2012-08-18
  • 2011-05-30
  • 1970-01-01
相关资源
最近更新 更多