抽象类和构造函数

时间:2010-04-12 15:24:55

标签: c# abstract-class

由于抽象类无法实例化,为什么构造函数仍然允许在抽象类中?

public abstract class SomeClass 
 {  
     private string _label;

     public SomeClass(string label)  
     {  
         _label=label;
     }  
}

2 个答案:

答案 0 :(得分:11)

任何派生类的构造函数仍然需要在抽象类中调用构造函数。如果您根本没有指定任何构造函数,则所有派生类只需使用编译器提供的默认无参数构造函数。

拥有一个构造函数是绝对有意义的 - 但在这种情况下,“public”实际上等同于“protected”。

答案 1 :(得分:3)

因为您仍然可以执行以下操作:

public class SomeChildClass : SomeClass
{
    public SomeChildClass(string label) : base(label){ }

    public string GetLabel() { return _label; }
}

如您所见,子类可以调用基本构造函数(在抽象类上)来创建自身的实例。

就像Jon说的那样,public确实没有必要。它实际上与protected相同。