學習C#構造函數的一點體會
學習C#構造函數的筆記:
C#構造函數大體上分為靜態C#構造函數和實例C#構造函數,實例C#構造函數當然就是在實例化類的時候執行,理解起來比較簡單,而靜態C#構造函數有些特別:
靜態C#構造函數只執行一次,在C#中,靜態C#構造函數一般在***次調用類的成員之前執行.編寫類的靜態C#構造函數的一個原因是,類有一些靜態字段或屬性,需要在***次使用類之前,從外部源中初始化這些靜態字段或屬性..NET運行庫沒有確保靜態C#構造函數什么時候執行,但至多運行一次
靜態C#構造函數不能帶任何參數,沒有訪問修飾符,其他C#代碼從來不調用它 總是由C#運行庫調用,所以修飾符沒有任何意義,,一個類只能有一個靜態C#構造函數,靜態C#構造函數只能訪問類的靜態成員,不能訪問實例成員
如果提供了帶參數的C#構造函數,編譯器不會自動提供默認的C#構造函數,只有在沒有定義任何C#構造函數時,編譯器才會提供默認的C#構造函數。
靜態C#構造函數在加載類時執行,而實例C#構造函數在創建類的實例時執行,所以可以在類中安全共存,即使參數列表相同
(2)從其他C#構造函數中調用C#構造函數
有時候在一個類中有幾個C#構造函數,以容納某些可選參數,這些C#構造函數包含了一些公同代碼,例:
- class car
- ...{
- private string description;
- private unit wheels;
- public Car(string model,unit nWheels)
- ...{
- this.desciption=description;
- this.nWheels=nWheels;
- }
- public car(string model)
- ...{
- this.description=description;
- this.nWheels=4;
- }
- }
上面類中的兩個C#構造函數初始化了相同的字段,C#有一個特殊的語法把上面的所有代碼都方到一起,稱C#構造函數初始化器可以實現:
- class car
- ...{
- private string description;
- private unit wheels;
- public Car(string model,unit nWheels)
- ...{
- this.desciption=description;
- this.nWheels=nWheels;
- }
- public car(string model) :this(model,4)
- ...{
- }
- }
上面的this關鍵字僅僅調用參數最匹配的那個C#構造函數,這里要注意:構造初始化器在C#構造函數之前執行!!!
假定運行下面代碼:
- Car myCar=new Car(\"Proton Persona\");
學習C#構造函數的一點體會就向你介紹到這里,希望對你學習C#構造函數有所幫助。
【編輯推薦】