2010-05-17 215 views
4

非靜態類可以同時具有靜態以及默認構造函數。靜態和默認構造函數

這兩個構造函數有什麼區別?我什麼時候只能用默認構造函數進行靜態或靜態?

回答

8

剛剛訪問類的第一次實例之前,每個AppDomain都會運行一次靜態構造函數。你可以用它來初始化靜態變量。

另一方面,每次創建類的新實例時都會運行默認構造函數。在默認構造函數中,您可以初始化實例的非靜態字段。

3

靜態構造函數只運行一次,無論該類型創建了多少個對象。默認的構造函數將爲該構造函數創建的每個實例運行。

0

崩潰黨所有人都離開後...

這兩個答案都是正確的,只是想添加此鏈接:Static Constructors (C# Programming Guide)

引用它們:

靜態構造用於初始化任何靜態數據,或執行需要被一次僅執行的特定動作。它在創建第一個實例或引用任何靜態成員之前自動調用。

它們的性質:

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

您可以前往以上鍊接進行演示和示例代碼。