2010-06-08 203 views

回答

30

staticpublic是正交的概念(即它們彼此沒有任何關係)。

public只是表示該類的用戶可以調用該構造函數(而不是像private)。

static意味着該方法(在本例中爲構造函數)不屬於類的實例,而屬於「類本身」。特別是,當第一次使用類時,靜態構造函數會自動調用一次

此外,靜態構造函數不能被製作爲publicprivate,因爲它不能被手動調用;它只能由.NET運行時自己調用 - 因此將其標記爲public不會有意義。

3

靜態構造函數...它保證被稱爲「一次」通過應用程序/應用程序域的生命。它可以包含您只想執行一次的語句。

Public Constructor ...由於我們不能將訪問修飾符添加到靜態構造函數,所以公共構造函數意味着您正在討論實例構造函數。如果一個實例構造函數是公共的,那麼外部世界可以創建它的實例。 其他選項是內部的(可以從圖書館內部調用),私人的(僅限於課堂內部)。

+1

保證被調用一次的靜態構造函數?如果該類型在應用程序的生命週期內從未使用過,該怎麼辦? – MPritchard 2010-06-08 07:43:14

+0

@Pritch,你是對的,在這種情況下,它不會被調用。但是,如果我不在我的應用程序中的任何地方使用(或引用)儀式,我甚至不需要擔心課程正在做(或不做)的事情? – 2010-06-08 07:50:14

+0

這一切都取決於你在構造函數中做什麼 – MPritchard 2010-06-08 09:12:32

22

在類實例化之前,靜態構造函數只運行一次。如果你想要發生一次事情就會使用它。一個很好的例子是汽車類(類似於他們在MSDN article解釋一下):

public class Bus 
{ 
    public static int busNo = 0; 

    static Bus() 
    { 
     Console.WriteLine("Woey, it's a new day! Drivers are starting to work."); 
    } 

    public Bus() 
    { 
     busNo++; 

     Console.WriteLine("Bus #{0} goes from the depot.", busNo); 
    } 
} 


class Program 
{ 
    static void Main(string[] args) 
    { 
     Bus busOne = new Bus(); 
     Bus busTwo = new Bus(); 
    } 

    // Output: 
    // Woey, it's a new day! Drivers are starting to work. 
    // Bus #1 goes from the depot. 
    // Bus #2 goes from the depot. 
} 
+0

我喜歡它,因爲清晰的第一行:簡單和簡單! – 2016-05-27 06:41:01

2

靜態構造函數

構造函數聲明使用static修飾符是一個靜態構造函數。靜態構造函數用於初始化靜態數據或執行需要在類的生命週期中僅執行一次的特定操作。靜態構造函數是在類中執行的第一個代碼塊。靜態構造函數在類的生命週期中只執行一次。它被自動調用。靜態構造函數不接受任何參數。它沒有訪問說明符。它不直接調用。

實例或公共構造

實例構造函數是用來初始化實例數據。每次創建類的對象時都會調用實例構造函數。它被明確地調用。實例構造函數接受參數。它有訪問說明符。