最近在编写一套开发框架结构主要应用.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>();
.....
}
}
上面所讲的两种方式都是以用反射机制来获取泛型对象的实例的。