.Net Generic中的default(T)跟new T()
先來看一段.Net C#中的generic程式碼。 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TestVS2008 { public class TestGeneric { public static T CreateGeneric<T>() where T : new () { return new T(); } public static T CreateGeneric_2<T>() { return default (T); } public static void Test() { int i = CreateGeneric< int >(); TestGeneric t = CreateGeneric<TestGeneric>(); TestGeneric t2 = CreateGeneric_2<TestGeneric>(); } } } 上面這段程式碼中,主要想要測試的是在使用泛型之下, new T()跟default(T)的差別。 首先看到CreateGeneric_2<T>()這個函式,它針對所需的型別T並沒有加入任何的限制條件。任何型別都可以帶入這個函式來使用。所以當它需要傳回一個T型別的物件時,它只能用default(T)的方式來產生物件。這種方式對一般類別或是value型別都適用。當你的T型別為value型別時,就會傳回所有bit均為0的值。當你的T型別為一般類別時,則會傳回null值。 再來看CreateGeneric<T>()這個函式,它限定說所帶入的T型別需要有預設的建構子。當然value型別也是可以適用,而一般的類別則必須提供預設建構子(不帶有任何...