C# 抽象类与构造函数

C# 抽象类与构造函数,c#,abstract-class,C#,Abstract Class,由于抽象类不能实例化,为什么抽象类中仍然允许构造函数 public abstract class SomeClass { private string _label; public SomeClass(string label) { _label=label; } } 任何派生类的构造函数仍然必须调用抽象类中的构造函数。如果您根本不指定任何构造函数,那么所有派生类将只需使用编译器提供的默认无参数构造函数 有一个构造

由于抽象类不能实例化,为什么抽象类中仍然允许构造函数

public abstract class SomeClass 
 {  
     private string _label;

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

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


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

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

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

    public string GetLabel() { return _label; }
}
如您所见,子类可以调用基构造函数(在抽象类上)来创建自身的实例


正如乔恩所说,
public
真的没有必要。它实际上与受保护的

不重复的可能重复相同-即询问公共构造函数的用途是什么,这询问构造函数的用途是什么