C# 類的構造函數 解析


構造函數

構造函數是一種方法,其名稱與其類型的名稱相同。 其方法簽名僅包含方法名稱和其參數列表;它不包含返回類型。

構造函數的定義規則:

(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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM