对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

相关文章
相关标签/搜索