C# new()约束简单介绍

开发 后端
这里介绍对于C# new()约束,大家可能有一个误解,以为使用了C# new约束之后,在创建对象时与非泛型的版本是一致的。

学习C#语言时,经常会遇到C# new()约束问题,这里将介绍C# new()约束一个误解问题的解决方法。

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

 

  1. public class Tester<T> 
  2. where T:new()  
  3. {  
  4. public Tester()  
  5. {  
  6. t = new T();//等同于非泛型版本的new? 例如 object o = new object();?  
  7. }  
  8.  
  9. private T t;  
  10.  

 

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

 

  1. Tester<SomeType> t = new Tester<SomeType>();  
  2. //此处编译器会检查SomeType是否具有无参构造函数。若没有则会有compile error。 


而Tester<T>类的构造函数中的new代码,实际上等同于下面的代码:

 

  1. public class Tester<T> 
  2. where T:new()  
  3. {  
  4. public Tester()  
  5. {  
  6.  t = System.Activator.CreateInstance<T>();  
  7. }  
  8.  
  9. private T t;  
  10.  


也就是说,仍然是用反射机制来获取泛型对象的实例的。以上介绍C# new()约束.

【编辑推荐】

  1. C# 3.0编译器简单介绍
  2. C#使用函数重载学习笔记
  3. Visual C#对数据库处理概述
  4. C#具有隐式类型声明描述
  5. C#使用SharpZipLib分析
责任编辑:佚名 来源: 博客园
相关推荐

2009-08-26 14:54:23

C# new和over

2009-08-03 17:51:43

C#引用类型

2009-08-20 16:25:59

C# 匿名方法

2009-08-14 16:46:44

C#元数据

2009-08-13 17:36:54

编译C#代码

2009-08-25 13:38:35

C# Timer组件

2009-08-07 17:12:07

C# DLL函数

2009-09-03 09:40:57

C#创建表单

2009-08-06 18:15:13

C# SQL Serv

2009-08-10 16:19:37

C#冒泡排序

2009-08-21 17:55:52

C#复合控件

2009-08-27 10:19:22

C#匿名类型

2009-08-07 17:41:40

C#预处理

2009-08-14 17:27:56

C#方法参数

2009-08-06 14:53:41

C# User类

2009-08-18 17:37:57

C#固定指针

2009-08-25 14:42:41

由C++转向C#

2009-09-02 14:33:57

C#类实现接口

2009-08-27 13:37:11

C#类和结构

2009-08-12 10:11:18

C# 回调函数
点赞
收藏

51CTO技术栈公众号