看这里(抽象类设计):http://msdn.microsoft.com/en-us/library/ms229047.aspx http://msdn.microsoft.com/en-us/library/ms229047.aspx
It says:
(1) 不要在抽象类型中定义公共或受保护的内部(Visual Basic 中的受保护的友元)构造函数。
在 C# 中,我们无法实例化抽象类。那么,在 C# 中为抽象类定义公共构造函数还重要吗?或者因为语义的原因而不为抽象类编写公共构造函数?
它还说:
(2) 在抽象类中定义受保护的或内部构造函数。
定义内部构造函数?在(1)中,它告诉我们不定义内部受保护的构造函数是因为“具有公共或受保护内部可见性的构造函数适用于可以实例化的类型”。为抽象类定义内部构造函数不会违反 (1) 中的规则吗?
提前致谢。 :)
让我们看一下每个案例。
受到推崇的:
受保护的- 最明显的情况 - 所有子类都可以调用构造函数,无论它们驻留在哪个程序集中(只要抽象基类itself对他们来说是可见的)。
internal- 当您希望抽象类型公开时很有用visible,但不公开可继承的。在这种情况下,您需要使所有非私有构造函数internal
。仅限于子类same程序集作为抽象基类将能够调用构造函数 - 实际上,只有它们才能继承。另一个用例是,如果您想要一个仅对同一程序集子类可见的“特殊”构造函数。
private- 主要用于“脏工作”构造函数,当抽象类使用构造函数链接时,这些构造函数是抽象类的其他构造函数的目标。唯一的其他用途,当all构造函数是私有的,只允许子类化nested类,它们确实可以访问包含类型的私有成员。
不建议:
public- 没用,行为正常同样地 to protected
。无论如何,只有子类可以调用构造函数,因为基类是抽象的。
受保护的内部- 这也与protected
. The protected internal
可访问性级别表示受保护或内部,而不是受保护和内部。但是,那internal
这里的修饰符没有任何作用 - 它没有prevent驻留在程序集外部的子类无法调用构造函数(假设抽象基类是公共的),因为它们可以依赖protected
访问,也不允许相同的程序集类型not子类调用它(类型是抽象的)。
这里的关键点是每个非private
抽象类中的构造函数已经at best protected
。香草internal
-modifier 加强了对谁可以调用构造函数的限制。public
and protected internal
没有完成任何事情,因为他们appear削弱限制,但并没有真正成功。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)