看这里(抽象类设计):http://msdn.microsoft.com/en-us/library/ms229047.aspx
上面写着:
(1)不以抽象类型定义公共或受保护的内部构造函数( Visual中的受保护朋友)。
在C#中,我们无法实例化抽象类。那么,在C#中为抽象类定义公共构造函数仍然重要吗?还是因为语义的原因而不为抽象类编写公共构造函数?
它还说:
(2)在抽象类中确实定义了受保护的或内部的构造函数.
定义内部构造器??在(1)中,它告诉我们,不定义内部受保护的构造函数是因为“具有公共或受保护内部可见性的构造函数用于可以实例化的类型”。定义抽象类的内部构造函数是否违反了(1)中的规则?
提前谢谢。:)
发布于 2010-11-29 15:42:26
让我们来看看每一个案例。
推荐:
internal。只有与抽象基类相同的程序集中的子类才能有效地调用构造函数,只有它们才能继承。另一个用例是,如果您想要一个“特殊”构造函数,该构造函数应该只对相同的程序集subclasses.的私有成员。
不建议:
protected相同。无论如何,只有子类才能调用构造函数,因为基类是abstract.protected也没有什么不同。protected internal可访问性级别意味着保护或内部,而不是保护和内部。但是,此处的internal修饰符没有任何用途--它不阻止驻留在程序集中之外的子类调用构造函数(假设抽象基类是公共的),因为它们可以依赖protected访问,也不允许非子类的相同程序集类型调用它(类型是抽象的)。这里的关键点是,抽象类中的每个非private构造函数都最好是protected。普通的internal-modifier加强了对谁可以调用构造函数的限制。public和protected internal没有完成任何事情,因为它们似乎削弱了限制,但并没有真正做到这一点。
发布于 2010-10-26 09:38:14
N C#,我们无法实例化抽象类。那么,在C#中为抽象类定义公共构造函数仍然重要吗?或者不为抽象类编写公共构造函数是因为语义的原因?
一点儿没错。您不希望用户看到一个可访问的构造函数,但是当他们调用它时,会得到一个编译错误。
定义内部构造器??在(1)中,它告诉我们,不定义内部受保护的构造函数是因为“具有公共或受保护内部可见性的构造函数用于可以实例化的类型”。定义抽象类的内部构造函数是否违反了(1)中的规则?
我相信规则1是关于public的,protected internal规则2是关于protected和internal的。所以两者之间没有交集。
发布于 2015-04-22 04:49:58
几年过去了。我想我现在对这个问题有了更好的理解。因此,除了Ani的优秀答案之外,我还想添加一些更多的输入。
在C#中,我们无法实例化抽象类。那么,在C#中为抽象类定义公共构造函数仍然重要吗?
对于编译器来说,这并不重要,但对代码读取器来说确实很重要。抽象类型中的公共构造函数对代码阅读器来说是误导(他们可能认为可以实例化)。
定义内部构造函数?在(1)中,它告诉我们,不定义内部受保护的构造函数是因为“具有公共或受保护内部可见性的构造函数用于可以实例化的类型”。定义抽象类的内部构造函数是否违反了(1)中的规则?
如果我们希望抽象类只能由同一个程序集中的子类继承,那么显然我们不能使用protected (否则它可以在程序集之外继承)。现在我们有一些选择:
public对代码阅读器来说是误导的。不要使用it.private不会使用work.protected.https://stackoverflow.com/questions/4022359
复制相似问题