对C#泛型中的new()约束的一点思考

2016-01-29 12:56 3 1 收藏

对C#泛型中的new()约束的一点思考,对C#泛型中的new()约束的一点思考

【 tulaoshi.com - ASP.NET 】

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

public class Tester
where T:new()
{
public Tester()
{
t = new T();//等同于非泛型版本的new? 例如 object o = new object();?
}

private T t;

}
  事实上,使用new关键字的作用只是让编译器在泛型实例化之处,检查所绑定的泛型参数是否具有无参构造函数:

Tester t = new Tester();
//此处编译器会检查SomeType是否具有无参构造函数。若没有则会有compile error。
  而Tester类的构造函数中的new代码,实际上等同于下面的代码:

public class Tester
where T:new()
{
public Tester()
{
 t = System.Activator.CreateInstance();
}

private T t;}  也就是说,仍然是用反射机制来获取泛型对象的实例的。

来源:http://www.tulaoshi.com/n/20160129/1488207.html

延伸阅读
Windows 操作系统的注册表包含了很多有关计算机运行的配置方式,打开注册表我们可以看到注册表是按类似于目录的树结构组织的,其中第二级目录包含了五个预定义主键分别是:HKEY_CLASSES_ROOT,HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_USERS,HKEY_CURRENT_CONFIG。 下面我们来分别解释这5个类的作用 HKEY_CLASSES_ROOT该主键包...
Java 5 提供泛型支持,泛型支持是开发人员多年以来所要求的特性。它代表了 Java 编程语言一次具有重要意义的升级。像泛型这么复杂的技术,不仅对工具供给商也对开发人员带来了挑战。 !-- frame contents -- !-- /frame contents -- 本文着重介绍 Eclipse 如何应对泛型挑战以及泛型给 Java 语言带来的变化,展示了如何在 Eclipse 中...
首先是如何创建、打开、读取、写入、保存的一般性代码:using System; using System.Reflection; namespace CExcel1 { class Class1 { [STAThread] static void Main(string[] args) {//创建Application对象 Excel.Application xApp=new Excel.ApplicationClass(); xApp.Visible=true; //得到WorkBook对象, 可以用两种方式之一: 下面...
一、 简介 所有的方法都使用一个来自于相同集合的元素的子集。在C# 2.0中,可选元素集将会继续增长。从历史上看-除了C++内联方法之外-方法都要求有一个名字、一个返回类型和一个方法体。而且可选择地,方法可以使用存取修饰符和一个参数列表。在C# 2.0中,方法名已经从必需的变成了可选的。 C# 2.0(一般就代表.NET)引入了匿名方...
对C#中的TreeView加背景图 翻译整理:李静南 下载源代码 原文地址:http://www.codeproject.com/cs/miscctrl/genmissingpaintevent.asp 序:在微软的.NET 的Forms窗口控件中,比如Treeview和ListView,仅仅是对通用控件的简单封装,因此他们不正常的引发Paint事件。 微软所发布内容...

经验教程

155

收藏

26
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部