簡體   English   中英

公共構造函數和靜態構造函數

[英]Public constructor and static constructor

我正在閱讀使用兩個構造函數的 C# 代碼。 一個是靜態的,另一個是公開的。 這兩個構造函數有什么區別? 我們必須使用靜態構造函數來做什么?

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

public只是意味着該類的用戶可以調用該構造函數(而不是例如private )。

static意味着該方法(在這種情況下是構造函數)不屬於類的實例,而是屬於“類本身”。 特別是,靜態構造函數在第一次使用時自動調用一次

此外,靜態構造函數不能被設為publicprivate因為它不能被手動調用; 它僅由 .NET 運行時本身調用 - 因此將其標記為public沒有意義。

在類被實例化之前,靜態構造函數只運行一次。 如果您希望某事只發生一次,則使用它。 一個很好的例子是 Bus 類(類似於他們在MSDN 文章中解釋的內容):

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.
}

靜態構造函數...保證在應用程序/應用程序域的整個生命周期中被稱為“一次”。 它可以包含您只想執行一次的語句。

公共構造函數... 由於我們不能向靜態構造函數添加訪問修飾符,因此公共構造函數意味着您正在談論實例構造函數。 如果實例構造函數是公共的,那么外部世界就可以創建它的實例。 其他選項是 Internal(可以從庫內調用)、Private(僅從類內調用)。

靜態構造函數

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

實例或公共構造函數

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

Static constructor只調用創建的類的第一個實例,但每次創建類的實例時都會調用public constructor

靜態構造函數

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

實例或公共構造函數

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

我的來源: C# 中的靜態構造函數與實例構造函數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM