對C#泛型實例化對像--轉

最近在編寫一套開發框架結構主要應用.Net 3.5以上的框架開發與應用。在此框架中應用了較多的泛型。下面來說講對泛型的實例化,以代碼爲例,如:html

public class A框架

{函數

  

}htm

public class B<T>對象

{開發

  public static T Get()get

     {編譯器

         //在這一塊如何實例化T這個對象呢?若是用default(T)這個是不行的。只能作一個null值處理。編譯

      }class

}

以上的方法就是遇到最麻煩的問題。一直以來都覺得default(T)就能夠實例化T這個對像,其實否則,這個只能起一個null值的做用。若是要解決以上的問題如今有兩種方法:

1、在使用泛型的類後面加入一個 where T : new(),代碼以下:

public class A

{

  

}

public class B<T> where T : new()

{

  public static T Get()

     {

         T result = new T();//這樣就能夠實例化。也能夠編譯經過。

         ...........

      }

}

對於new()約束,你們可能有一個誤解,覺得使用了new約束以後,在建立對象時與非泛型的版本是一致的。事實上,使用new關鍵字的做用只是讓編譯器在泛型實例化之處,檢查所綁定的泛型參數是否具備無參構造函數,也能夠實例化出來一個對象。

2、能夠使用System.Activator.CreateInstance<T>()建立泛型實例對像。代碼以下:

public class A

{

  

}

public class B<T>

{

  public static T Get()

     {

        T s = System.Activator.CreateInstance<T>();

         .....

      }

}

上面所講的兩種方式都是以用反射機制來獲取泛型對象的實例的。

 

原文地址:http://www.2cto.com/kf/201110/107731.html

相關文章
相關標籤/搜索