我們知道,抽象類是不能被實例化的。但抽象類是否可以有構造函數?答案是可以有。抽象類的構造函數用來初始化抽象類的一些字段,而這一切都在抽象類的派生類實例化之前發生。不僅如此,抽線類的構造函數還有一種巧妙應用:就是在其內部實現子類必須執行的代碼。
以下就是在抽象類的構造函數中來初始化字段。
class Program
{static void Main(string[] args){Employee employee = new Employee();
Console.WriteLine(employee.ID);Console.ReadKey();}}public abstract class Base{private Guid _id;
public Base()
{this._id = Guid.NewGuid();
}public Guid ID
{get { return this._id; }}}public class Employee : Base{}
總結:雖然抽象類不能被實例化,但可以有構造函數。由於抽象類的構造函數在實例化派生類之前發生,所以,可以在這個階段初始化抽象類字段或執行其它與子類相關的代碼。