C#類學習-3

C#類的構造函數

構造函數是在創建給定類型的對象時執行的方法。

構造函數具有與類相同的名稱,它通常初始化新對象的數據成員。

如下面示例:

public class myclass

{

        //下面爲myclass類的構造函數

        public myclass()  //與類名相同的函數爲類的構造函數

       {

       }

}

不帶參數的構造函數稱爲類的“默認構造函數”。
只要使用 new 運算符實例化對象,並且不爲 new 提供任何參數,就會調用默認構造函數。
 
除非類是 static 的,否則 C# 編譯器將爲無構造函數的類提供一個公共的默認構造函數,以便該類可以實例化。
 
通過將構造函數設置爲私有構造函數,可以阻止類被實例化
如下例:
class myclass
{
       //用private 關鍵字來聲明爲私有構造函數
       private myclass()
      {
 
      }
}
 
 
結構類型的構造函數與類的構造函數類似,但是 structs 不能包含顯式默認構造函數,因爲編譯器將自動提供一個構造函數。
 
只有當 structnew 實例化時,纔會調用此默認構造函數。
基於 structs 的對象(包括所有內置數值類型)可以初始化或賦值後使用。
因此對值類型調用默認構造函數不是必需的。
類和 structs 都可以定義具有參數的構造函數。帶參數的構造函數必須通過 new 語句或 base 語句來調用。
類和 structs 還可以定義多個構造函數,並且二者均不需要定義默認構造函數。
 
構造函數可以使用 base 關鍵字來調用基類的構造函數。
基類的構造函數在執行構造函數塊之前被調用。
base 關鍵字可帶參數使用,也可不帶參數使用。構造函數的任何參數都可用作 base 的參數
如果基類沒有提供默認構造函數,派生類必須使用 base 顯式調用基構造函數。
構造函數可以使用 this 關鍵字調用同一對象中的另一構造函數。base 一樣,this 可帶參數使用也可不帶參數使用,構造函數中的任何參數都可用作 this 的參數
 
構造函數可以標記爲 publicprivateprotectedinternalprotectedinternal
這些訪問修飾符定義類的用戶構造該類的方式。
 
使用 static 關鍵字可以將構造函數聲明爲靜態構造函數。
在訪問任何靜態字段之前,都將自動調用靜態構造函數,它們通常用於初始化靜態類成員

 

靜態構造函數

靜態構造函數用於初始化任何靜態數據,或用於執行僅需執行一次的特定操作。

在創建第一個實例或引用任何靜態成員之前,將自動調用靜態構造函數。

靜態構造函數特點:

  • 靜態構造函數既沒有訪問修飾符,也沒有參數。
  • 在創建第一個實例或引用任何靜態成員之前,將自動調用靜態構造函數來初始化
  • 無法直接調用靜態構造函數。
  • 在程序中,用戶無法控制何時執行靜態構造函數。
  • 靜態構造函數的典型用途是:當類使用日誌文件時,將使用這種構造函數向日志文件中寫入項。
  • 靜態構造函數在爲非託管代碼創建包裝類時也很有用,此時該構造函數可以調用 LoadLibrary 方法。
  • 如果靜態構造函數引發異常,運行時將不會再次調用該構造函數,並且在程序運行所在的應用程序域的生存期內,類型將保持未初始化。

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章