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>();
               .....
        }
}


上面所讲的两种方式都是以用反射机制来获取泛型对象的实例的。


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

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

【C#】允许泛型方法<T>返回空值Null

泛型方法返回default(T)
  • qq_18995513
  • qq_18995513
  • 2017年03月31日 14:56
  • 3451

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

using System;using System.Collections.Generic;using System.Text;namespace Genericity{    class Progr...
  • zhangking
  • zhangking
  • 2007年05月30日 17:54
  • 5451

C#中的List<string>泛型类示例

在C#代码中使用一系列字符串(strings)并需要为其创建一个列表时,List泛型类是一个用于存储一系列字 符串(strings)的极其优秀的解决办法。下面一起有一些List泛型类的示例,一起来看看...
  • weixin_36602742
  • weixin_36602742
  • 2017年06月03日 11:13
  • 1664

如何通过C#.NET中的反射机制来创建C#.NET泛型类的实例,并调用其方法??

如何通过C#.NET中的反射机制来创建C#.NET泛型类的实例,并调用其方法?
  • phker
  • phker
  • 2016年06月21日 08:37
  • 1280

C#三十二 泛型的理解和使用

日常生活中的事物都是有类型的,比如我们说“一个女人”,那么“女”就是这个人的类型。我们可以说“女人都是水做的”,那么听者都知道这是在说“女”这种类型的人。再比如你去肉店买肉,你可以对老板说“我要十斤猪...
  • zhangchen124
  • zhangchen124
  • 2016年05月11日 21:52
  • 5488

C# ORM中反射与泛型的交叉应用 - 动态创建泛型实例并为其赋值

好久没有写文章了,终于找到工作,抽空写一下冒个泡。问题最近遇到一个这样 ORM 的问题,一个返回类型为 List 泛型方法中,需要做到根据条件访问数据库,并且把得到的结果存入 List 中返回。由于...
  • qq_21265915
  • qq_21265915
  • 2017年07月19日 09:14
  • 768

C#泛型(二)——创建泛型类

首先介绍一个一般的、非泛型的简化链表类,它可以包含任意类型的对象,以后再把这个类转化为泛型类。 在链表中,一个元素引用下一个元素。所以必须创建一个类,它将对象封装在链表中,并引用下一个对象。类Lin...
  • wuzhanwen
  • wuzhanwen
  • 2017年11月21日 17:49
  • 95

C#泛型接口实例

泛型接口的类型参数要么已实例化,要么来源于实现类声明的类型参数!
  • ice_baili
  • ice_baili
  • 2015年02月05日 09:59
  • 1010

如何获取继承类中的泛型T的类型

首先, T.getClass() 或 T.class都是非法的,因为T是泛型变量; 由于一个类的类型在编译期已确定,故不能在运行期得到T的实际类型; 获取方式如下: abstract class A ...
  • u011453631
  • u011453631
  • 2015年02月27日 17:30
  • 2068
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c#泛型的实例化
举报原因:
原因补充:

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