構造函數
構造函數是一種方法,其名稱與其類型的名稱相同。 其方法簽名僅包含方法名稱和其參數列表;它不包含返回類型。
構造函數的定義規則:
(1)C# 語言的構造函數的名稱必須與類名相同。
(2)構造函數沒有返回值。它可以帶參數,也可以不帶參數。
(3)聲明類對象時,系統自動調用構造函數。在構造函數中不要做對類的實例進行初始化以外的事情,也不能被顯式地調用。
(4)構造函數可以重載,從而提供初始化類對象的不同方法;
(5)若在聲明時未定義構造函數,系統會自動生成默認的構造函數,此時構造函數的函數體為空。
(6)靜態構造函數,用static修飾,用於初始化靜態變量,一個類只允許有一個構造函數,在類實例化時加載,這時修飾符public、private失去作用。
(7)構造函數可以使用public、protected、private修飾符。一般地,構造函數總是public 類型的。private 類型的構造函數表明類不能被實例化,通常用於只含有靜態成員的類。
(8)引用父類構造時用():base()方法,引用自身重載的構造使用():this(int para)。
(9)一個構造函數的返回類型是這個類的一個實例,而一個普通方法的返回類型可以是任何類型。
舉個小例子,幫助理解
1 //父類 2 public class Person 3 { 4 private string last; 5 private string first; 6 7 //父類的構造函數 8 public Person(string lastName, string firstName) 9 { 10 last = lastName; 11 first = firstName; 12 System.Console.WriteLine("父類帶參數構造函數"); 13 } 14 } 15 16 //子類 17 public class Adult : Person 18 { 19 //帶參數的構造函數 20 public Adult(string firstName, string lastName): base(lastName, firstName) 21 { 22 System.Console.WriteLine("子類帶參數構造函數"); 23 } 24 25 //靜態構造函數 (靜態構造函數必須無參數,也不允許有訪問修飾符) 26 static Adult() 27 { 28 System.Console.WriteLine("子類靜態構造函數"); 29 } 30 }
調用:
調用順序如下圖:
如果基類沒有提供無參數構造函數,派生類必須使用 base
顯式調用基類構造函數。
在訪問任何靜態字段之前,都將自動調用靜態構造函數,它們通常用於初始化靜態類成員。
在訪問一個類的時候,系統將首先執行構造函數中的語句。構造函數的功能是創建對象,使對象的狀態合法化。在從構造函數返回之前,對象都是不確定的,不能用於執行任何操作;只有在構造函數執行完成之后,存放對象的內存塊中才存放這一個類的實例。
部分內容摘錄:https://www.cnblogs.com/tanding/archive/2012/06/26/2563501.html