熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

對C#泛型中的new()約束的一點思考

2022-06-13   來源: .NET編程 

  對於new()約束大家可能有一個誤解以為使用了new約束之後在創建對象時與非泛型的版本是一致的

  public class Tester<T>
where T:new()
{
public Tester()
{
t = new T();//等同於非泛型版本的new? 例如 object o = new object();?
}

  private T t;

  }

  事實上使用new關鍵字的作用只是讓編譯器在泛型實例化之處檢查所綁定的泛型參數是否具有無參構造函數

  Tester<SomeType> t = new Tester<SomeType>();
//此處編譯器會檢查SomeType是否具有無參構造函數若沒有則會有compile error

  而Tester<T>類的構造函數中的new代碼實際上等同於下面的代碼

  public class Tester<T>
where T:new()
{
public Tester()
{
 t = SystemActivatorCreateInstance<T>();
}

  private T t;

  }

  也就是說仍然是用反射機制來獲取泛型對象的實例的


From:http://tw.wingwit.com/Article/program/net/201311/13556.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.