程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#泛型秘訣(8完)

C#泛型秘訣(8完)

編輯:關於C語言

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。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved