C#对泛型实例化对像的方法
2016-07-01 15:43
232 查看
最近在搞一个小东东,用到了泛型的处理,用到了对泛型的实例化问题。下面来讲讲对泛型的实例化,以代码为例,如:
以上的方法就是遇到最麻烦的问题。一直以来都以为default(T)就可以实例化T这个对像,其实不然,这个只能起一个null值的作用。如果要解决以上的问题现在有两种方法:
一、在使用泛型的类后面加入一个 where T : new(),代码如下:
对于new()约束,大家可能有一个误解,以为使用了new约束之后,在创建对象时与非泛型的版本是一致的。事实上,使用new关键字的作用只是让编译器在泛型实例化之处,检查所绑定的泛型参数是否具有无参构造函数,也可以实例化出来一个对象。
二、可以使用System.Activator.CreateInstance<T>()创建泛型实例对像。代码如下:
上面所讲的两种方式都是以用反射机制来获取泛型对象的实例的。
public class A { } public class B<T> { public static T Get() { //在这一块如何实例化T这个对象呢?如果用default(T)这个是不行的。只能做一个null值处理。 } }
以上的方法就是遇到最麻烦的问题。一直以来都以为default(T)就可以实例化T这个对像,其实不然,这个只能起一个null值的作用。如果要解决以上的问题现在有两种方法:
一、在使用泛型的类后面加入一个 where T : new(),代码如下:
public class A { } public class B<T> where T : new() { public static T Get() { T result = new T();//这样就可以实例化。也可以编译通过。 ........... } }
对于new()约束,大家可能有一个误解,以为使用了new约束之后,在创建对象时与非泛型的版本是一致的。事实上,使用new关键字的作用只是让编译器在泛型实例化之处,检查所绑定的泛型参数是否具有无参构造函数,也可以实例化出来一个对象。
二、可以使用System.Activator.CreateInstance<T>()创建泛型实例对像。代码如下:
public class A { } public class B<T> { public static T Get() { T s = System.Activator.CreateInstance<T>(); ..... } }
上面所讲的两种方式都是以用反射机制来获取泛型对象的实例的。
相关文章推荐
- C# FTP操作类
- C# FileStream复制大文件
- C# 执行cmd命令,以进程的形式执行应用程序,在新的线程中执行耗时的功能逻辑
- C# 14位日期型字符串yyyyMMddHHmmss转变为日期格式
- c#解压
- c#压缩文件
- c#压缩目录
- c#递归压缩文件夹方法
- c#导出Excel文件,转换为可读模式
- c#获取远程主机MAC
- c#获取远程主机IP
- c#获取本机的MAC
- C#之AES256位加密解密
- C#数据导出到Excel文件
- 20 如何在C#中存一批数据,数组
- C#调试跟踪函数的使用及找出最大值及最大值所在索引
- c#数字转换为大写汉字
- C#StreamReader 读取Txt文件
- c#删除指定目录下所有内容:方法二--找到所有文件和子文件夹删除
- c#删除指定目录下所有内容