最近在学历基类的写法时,遇到了一个问题:如何怎么创建一个泛型类T的实例呢?
废话不多说了,直接上代码吧,目前发现三种方法,先贴上,以后再总结,希望能帮助跟我遇到同样问题的朋友。
方法一,通过外部方法传入的实例来实例化:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public class MySQLHelp<T>
{
private T t;
public MySQLHelp(T t)
{
this .t = t;
}
}
public class Test{
public static void Main(){
MySQLHelp<Message> mm = new MySQLHelp<Message>( new Message());
}
}
public class Message{
}
|
方法二,通过限制泛型类的构造函数:
限制泛型类必须带有无参构造方法:public class MySQLHelp<T> where T:new()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public class MySQLHelp<T> where T: new ()
{
private T t= new T();
public MySQLHelp()
{
}
}
public class Test{
public static void Main(){
MySQLHelp<Message> mm = new MySQLHelp<Message>();
}
}
public class Message{
}
|
方法三,利用微软提供的方法:
利用微软的类:System.Activator(包含创建本地或远程对象类型的方法或获取引用的方法,翻译名:活化剂类)
创建指定泛型类型参数指定的类型的实例:System.Activator.CreateInstance<T>()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public class MySQLHelp<T>
{
private T t = System.Activator.CreateInstance<T>();
public MySQLHelp()
{
}
}
public class Test{
public static void Main(){
MySQLHelp<Message> mm = new MySQLHelp<Message>();
}
}
public class Message{
}
|