【问题标题】:Abstract class and constructor抽象类和构造函数
【发布时间】:2010-04-12 15:24:55
【问题描述】:

既然抽象类不能实例化,为什么抽象类内部还允许有构造函数?

public abstract class SomeClass 
 {  
     private string _label;

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

【问题讨论】:

标签: c# abstract-class


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    public class SomeChildClass : SomeClass
    {
        public SomeChildClass(string label) : base(label){ }
    
        public string GetLabel() { return _label; }
    }
    

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

    正如 Jon 所说,public 真的没有必要。它实际上与protected 相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 2023-03-04
      • 2015-03-20
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多