構造函數:和類同名,但沒有返回類型的方法。
1.默認構造函數
默認構造函數不帶參數,只能把所有的成員字段初始化為標準的默認值(如引用類型為空引用,數值數據類型為0,bool為false等)。
2.自定義構造函數
若顯示添加了一個帶參數的構造函數,則無法使用不帶任何參數的默認構造函數。但是此時我們可以顯式添加一個默認構造函數。
3.靜態構造函數
靜態構造函數沒有參數和訪問修飾符,只執行一次。
一個類只能有一個靜態構造函數。
靜態構造函數只能訪問類的靜態成員,不能訪問實例成員。
無參數的實例構造函數和靜態構造函數可以在同一個類中同時定義。雖然參數列表相同,但二者并不矛盾(加載類時執行靜態構造函數,在創建實例時執行實例構造函數,二者不會有沖突)。
public class Test { private int number; /// <summary> /// 帶一個參數的構造函數 /// </summary> /// <param name="numberParam">參數</param> public Test(int numberParam) { this.number = numberParam; } /// <summary> /// 顯式添加的默認構造函數 /// </summary> public Test(){} /// <summary> /// 靜態構造函數 /// </summary> static Test() { } }
同一個類中:從一個構造函數調用其他構造函數——使用構造函數初始化器
以下兩個構造函數初始化了相同的字段:
public class Car { private string description; private uint nWheels; public Car(string desc,uint nwh) { this.description = desc; this.nWheels = nwh; } public Car(string desc) { this.description = desc; this.nWheels = 4; } }
優化代碼,使用構造函數初始化器。構造函數初始化器在構造函數的函數體之前執行。
public class Car { private string description; private uint nWheels; public Car(string desc,uint nwh) { this.description = desc; this.nWheels = nwh; } public Car(string desc) :this(desc,4) { } }
參考書籍:《C#高級編程(第9版)》
浙公網安備 33010602011771號