c#泛型的实例化

转载 2016年05月31日 15:03:48

c#泛型的实例化


框架中应用了较多的泛型。下面来讲讲对泛型的实例化,以代码为例,如:


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#中通过读取配置文件动态创建泛型对象

众所周知,在c#中,我们在获知的某一类型后,可以运用Activator.CreateInstance来动态的创建对象的实例。获取类型的话,可以使用typeof或者GetType来实现。而笔者最近遇到了...

如何实现泛型<T>带参数实例化

这个世界是懒货们为了偷懒而创造的
  • copelis
  • copelis
  • 2015年02月09日 17:16
  • 1460

C# 写的一个泛型类和泛型方法示例

using System;using System.Collections.Generic;using System.Text;namespace Genericity{    class Progr...

C#中利用泛型实现实例单件化

C#中利用泛型实现实例单件化 [ 2007-8-17 13:15:00 | By: 陈晴阳 ]   2 推荐 ...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

java泛型对象初始化--java泛型对象能实例化吗T t=new T()

java中没法得到泛型参数化类型,因为在编译期没法确定泛型参数化类型,也就找不到对应的类字节码文件,自然就不行了  泛型反射的关键是获取ParameterizedType,再调用它的getActual...

机房重构之泛型的使用

在七层架构中,实体类即数据库的映射,因此实体类中的属性和数据库表中的字段是相对应的。把DataTable中的每一行记录视为一个实体类,把其中的字段读取出来,到实体类的属性中,再把所有的实体类存在泛型集...

ConvertHelper与泛型集合

在机房重构时,我们经常会用到ConvertHelper。它把从数据库中查询到的dateTable(也是一个临时表)转化为泛型,然后再填充到DataGridView控件中。ConvertHelper类有...

C#之泛型实例化对象的理解

原文地址:http://www.cnblogs.com/yueyue184/p/5032156.html 什么是泛型        我们在编写程序时,经常遇到两个模块的功能非常相似...

java泛型程序设计——Varargs 警告+不能实例化类型变量

【0】README0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 Varargs 警告+不能实例化类型变量 的知识;【1】 Varar...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c#泛型的实例化
举报原因:
原因补充:

(最多只允许输入30个字)