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#泛型实例化对像的更多相关文章

  1. 对C#泛型实例化对像--转

    最近在编写一套开发框架结构主要应用.Net 3.5以上的框架开发与应用.在此框架中应用了较多的泛型.下面来讲讲对泛型的实例化,以代码为例,如: public class A { } public cl ...

  2. C#对泛型实例化对像的方法

    最近在搞一个小东东,用到了泛型的处理,用到了对泛型的实例化问题.下面来讲讲对泛型的实例化,以代码为例,如: public class A { } public class B<T> { p ...

  3. DataTable转实体Model,DataRow转实体Model,DataTable转泛型T,DataRow转泛型T

    前言,此方法利用反射将DataRow转成实体,由于反射性能不行,大家就看看就行了吧. 代码来啦 using System; using System.Collections.Generic; usin ...

  4. Atitit 泛型原理与理解attilax总结

    Atitit 泛型原理与理解attilax总结 1. 泛型历史11.1.1. 由来11.2. 为什么需要泛型,类型安全21.3. 7.泛型的好处22. 泛型的机制编辑22.1.1. 机制32.1.2. ...

  5. 浅析.NET泛型

    泛型是.NET Framework 2.0最强大的功能,通过泛型可以定义类型安全的数据结构,而没有必要使用实际的数据类型,这将显著提高性能并得到更高质量的代码.在.NET Framework 2.0之 ...

  6. 深入理解C#泛型

    前面两篇文章介绍了C#泛型的基本知识和特性,下面我们看看泛型是怎么工作的,了解一下泛型内部机制. 泛型内部机制 泛型拥有类型参数,通过类型参数可以提供"参数化"的类型,事实上,泛型 ...

  7. .net泛型理解

    泛型简介: 泛型(Generic Type)是.NET Framework2.0最强大的功能之一.泛型的主要思想是将算法与数据结构完全分离开,使得一次定义的算法能作用于多种数据结构,从而实现高度可重用 ...

  8. 转载.net泛型理解说明

    net泛型理解 泛型简介: 泛型(Generic Type)是.NET Framework2.0最强大的功能之一.泛型的主要思想是将算法与数据结构完全分离开,使得一次定义的算法能作用于多种数据结构,从 ...

  9. 对C#泛型中的new()约束思考

    对于new()约束,大家可能有一个误解,以为使用了new约束之后,在创建对象时与非泛型的版本是一致的:<public class Tester<T> where T:new() {  ...

随机推荐

  1. 我为NET狂官方群福利贴:一些常用的工具:2016-08-01更新

    本次更新下载:http://pan.baidu.com/s/1skXzG4H 源码文档见官方群(以下为8.1更新内容) 逆天工具 CDN 资源库 国内 http://www.bootcdn.cn/ h ...

  2. 广州的小伙伴福利-由微软组织的在广州SQL Server线下活动

    请按照如下格式报名.

  3. Git(远程仓库:git@oschina)-V2.0

    1.注册git@osc(也就是“码云”) 这里会提示注册密码==push密码,反正一定要记住的东西.   2.安装git 这里要设置个人信息 git config --list //查看git信息 g ...

  4. PPT转化成Image、PPTX、XPS、EMF

    最近工作经常用到演示文稿,接触到了一款不错的免费软件—Free Spire.Presentation.使用之后发现这款软件非常轻巧,功能还挺齐全.这款软件的转化功能也是非常不错的,平时遇到的各种转换难 ...

  5. 记一次使用 android 自带 WebView 做富文本编辑器之API、机型的兼容及各种奇葩bug的解决

    转载请声明出处(http://www.cnblogs.com/linguanh/) 目录 1,测试设备介绍 2,开源项目richeditor及CrossWalk的选择 3,遇到的bug及其解决方法 4 ...

  6. Java 计算N阶乘末尾0的个数-LeetCode 172 Factorial Trailing Zeroes

    题目 Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in ...

  7. 代码的坏味道(7)——临时字段(Temporary Field)

    坏味道--临时字段(Temporary Field) 特征 临时字段的值只在特定环境下有意义,离开这个环境,它们就什么也不是了. 问题原因 有时你会看到这样的对象:其内某个实例变量仅为某种特定情况而设 ...

  8. parseInt实例详解

    parseInt() 函数可解析一个字符串,并返回一个整数. parseInt(string, radix) 参数 描述 string 必需.要被解析的字符串. radix 可选.表示要解析的数字的基 ...

  9. 在CentOS 7上安装.NET Core R2跑Hello World

    前言 在上个月.NET Core出了最新版本预览版,只是在Window系统上试验了一下.原本想等发布正式版的时候在linux系统上试试,可能还需要一段时间,刚好有空可以折腾一下. 由于之前安装的Ubu ...

  10. VC程序获取管理员权限

    一: 编译程序的时候设置一下 在项目属性--连接器--清单文件--UAC执行级别改为requireAdministrator 二: void GainAdminPrivileges(CString s ...