Mou*_*Lin 4 .net c# abstract-class design-guidelines
看这里(抽象类设计):http://msdn.microsoft.com/en-us/library/ms229047.aspx
它说:
(1)不要在抽象类型中定义公共或受保护的内部(Visual Basic中的受保护的朋友)构造函数.
在C#中,我们无法实例化抽象类.那么,在C#中为抽象类定义公共构造函数是否仍然重要?或者因为语义含义而没有为抽象类编写公共构造函数?
它还说:
(2)在抽象类中定义受保护或内部构造函数.
定义内部构造函数?? 在(1)中,它告诉我们不定义内部受保护的构造函数是因为"具有公共或受保护的内部可见性的构造函数是针对可以实例化的类型".不为抽象类定义内部构造函数会破坏(1)中的规则吗?
提前致谢.:)
让我们看看每个案例.
protected - 最明显的情况 - 所有子类都可以调用构造函数,而不管它们驻留在哪个程序集中(只要抽象基类本身对它们可见).
internal - 当您希望抽象类型公开可见但不可公开继承时很有用.在这种情况下,您可能希望创建所有非私有构造函数internal.只有与抽象基类相同的程序集中的子类才能调用构造函数 - 实际上,只有它们能够继承.另一个用例是如果你想要一个只能对同一个程序集子类可见的"特殊"构造函数.
private - 主要用于"脏工作"构造函数,它在使用构造函数链时由抽象类的其他构造函数作为目标.当所有构造函数都是私有时,唯一的另一个用途是仅允许嵌套类进行子类化,嵌套类可以访问contains-type的私有成员.
公共 -没有什么用处,表现同样到protected.只有子类可以调用构造函数,因为基类是抽象的.
受保护的内部 - 这也没有什么不同protected.该protected internal访问级别来保护或内部,而不是保护和内部.但是,internal这里的修饰符没有任何意义 - 它不会阻止驻留在程序集外部的子类调用构造函数(假设抽象基类是公共的),因为它们可以依赖protected访问,也不允许相同的程序集类型不是调用它的子类(类型是抽象的).
这里的关键点是private抽象类中的每个非构造函数都已经充其量了 protected.vanilla internal-modifier强化了对谁可以调用构造函数的限制.public并protected internal没有完成任何事情,因为它们似乎削弱了限制,但并没有真正成功.