C#泛型秘訣(8完)

來源:互聯網
上載者:User
 

4.13 初始化泛型變數為它們的預設值

問題

您的泛型類包含一個變數,它的類型和類中定義的型別參數一樣。在構造泛型類時,您希望這個變數被初始化為它的預設值。

解決方案

簡單地使用default關鍵字把變數初始化為它的預設值:

public class DefaultValueExample<T>
    {
        T data = default(T);
        public bool IsDefaultData()
        {
            T temp = default(T);
            if (temp.Equals(data))
            {
                return (true);
            }
            else
            {
                return (false);
            }
        }
        public void SetData(T val)
        {
            data = val;
        }
}

 

下面的代碼使用了這個類:

public static void ShowSettingFieldsToDefaults()
    {
        DefaultValueExample<int> dv = new DefaultValueExample<int>();
        // 檢查成員data是否已經被設定為它的預設值; 返回true.
        bool isDefault = dv.IsDefaultData();
        Console.WriteLine("Initial data: " + isDefault);
        // 設定成員data.
        dv.SetData(100);
        // 再次檢查, 這次返回false.
        isDefault = dv.IsDefaultData();
        Console.WriteLine("Set data: " + isDefault);

 

第一次調用IsDefaultData返回true,而第二次調用返回false,輸出如下:

Initial data: True

Set data: False

討論

當對一個和泛型的型別參數一樣類型的變數進行初始化時,您不能僅僅設定它為null。當型別參數是一個實值型別如int或char會怎麼樣呢?這將無法工作,因為實值型別不能為null。您可能會想到可空類型,如long?或Nullable<long>可以被設定為null(參考秘訣4.7瞭解更多關於可空類型的內容)。但編譯器無從得知將使用何種類型實參來構造類型。(譯者註:這裡的意思是編譯器並不知道使用者使用的是實值型別還是參考型別,因為可空類型僅僅是對實值型別而言)

default關鍵字允許您告訴編譯器在編譯期將會使用這個變數的預設值。如果類型實參提供了一個數字值(如int,long,decimal),那麼預設值為0。如果類型實參提供的是參考型別,那麼預設值為null。如果類型實參提供了一個結構體,那麼結構體的預設值會把它的每個成員進行初始化:數字類型為0,參考型別為null。

閱讀參考

查看秘訣4.7;查看MSDN文檔中的“default Keyword in Generic Code”主題。

(完)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.