由于抽象类无法实例化,为什么构造函数仍然允许在抽象类中?
public abstract class SomeClass
{
private string _label;
public SomeClass(string label)
{
_label=label;
}
}
答案 0 :(得分:11)
任何派生类的构造函数仍然需要在抽象类中调用构造函数。如果您根本没有指定任何构造函数,则所有派生类只需使用编译器提供的默认无参数构造函数。
拥有一个构造函数是绝对有意义的 - 但在这种情况下,“public”实际上等同于“protected”。
答案 1 :(得分:3)
因为您仍然可以执行以下操作:
public class SomeChildClass : SomeClass
{
public SomeChildClass(string label) : base(label){ }
public string GetLabel() { return _label; }
}
如您所见,子类可以调用基本构造函数(在抽象类上)来创建自身的实例。
就像Jon说的那样,public
确实没有必要。它实际上与protected
相同。