簡體   English   中英

靜態屬性的默認值

[英]default value for a static property

我喜歡c#,但為什么我可以這樣做:

public static bool Initialized { private set; get; }

或這個 :

public static bool Initialized = false;

但不是兩者兼而有之?

我只需要為我的變量(私有集)設置訪問級別,我需要在啟動時將其設置為false。 我不想制作那個無聊的私有_Initialized變量,它將由公共Initialized var的getter返回。 我喜歡我的代碼很漂亮。 (注意:我的變量是靜態的,它不能在構造函數中初始化)。

謝謝

您可以使用靜態構造函數

static MyClass()
{
    Initialized = false;
}

但是,正如其他人所提到的,bool的默認值將為false。

從C#6開始:

public static bool Initialized { private set; get; } = false;

你可以這樣做:

public static bool Initialized { private set; get; }

由於默認情況下bool值始終為false,因此無需初始化它。

如果默認情況下需要這個,或者要有更復雜的邏輯,則需要在靜態構造函數中執行此操作或使用支持字段。

至於“我喜歡我的代碼是美麗的” - 就個人而言,對於非默認初始化,我認為這就像“美麗”:

private static bool initialized = true;
public static bool Initialized { get { return initialized; } }

這使得非默認的初始化非常明顯,這不是一件壞事。

你提到的兩個代碼塊是兩個不同的東西。

第一個塊是自動實現的屬性定義 這是完全屬性定義的語法糖,如下所示:

private static bool _initialized;
public static bool Initialized
{
    private set
    {
        _initialized = value;
    }
    get
    {
        return _initialized;
    }
}

您的第二個代碼塊是靜態成員定義 如果你看一下我上面給出的擴展,你會發現它包含一個私有的靜態成員定義。 如果您想提供初始值,可以在此處執行:

private static bool _initialized = false;
public static bool Initialized
{
    private set
    {
        _initialized = value;
    }
    get
    {
        return _initialized;
    }
}

您正在使用的內聯屬性定義只是為了在最常見的情況下使代碼更短。 如果您想要做任何其他事情,可以使用完整形式的屬性代碼。

或者,您可以使用完全不同的路徑並使用靜態構造函數。 (見Corey的回答

暫無
暫無

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

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