where(泛型类型约束)

来源:互联网 发布:阿里云机房测速 编辑:程序博客网 时间:2024/05/01 02:13

   通过使用泛型,可以创建类、接口和方法,它们以一种类型安全的工作方式操作各种数据。本质上,术语“泛型”指的是“参数化类型”(parameterized types)。参数化类型非常重要,因为它们可以在创建类、接口、方法和委托的时候将要操作的数据类型作为参数进行指定。
通过泛型,可以创建一个类,使其自动处理不同类型的数据。使用参数化类型的类、接口、方法和委托都可以称为“泛型”。

   今天在浏览代码的时候看到关于where(泛型类型约束),以前没有看过这种写法,就查了查做了一下整理,下面和大家分享一下。

其中,where T:参数类型约束,在.net中支持五种类型的约束:

where T : struct | T必须是一个结构类型;
where T : class T必须是一个类(class)类型;
where T : new() | T必须要有一个无参构造函数;
where T : NameOfBaseClass | T必须继承名为NameOfBaseClass类;
where T : NameOfInterface | T必须实现名为NameOfInterface接口;

详细的可参考MSDN:http://msdn.microsoft.com/zh-cn/library/bb384067.aspx

其中,在开发这块看了一下,用where T:new()比较多,自己也搜索了一些相关资料,整理了一下:

new()构造函数约束允许开发人员实例化一个泛型类型的对象。一般情况下,我们无法创建一个泛型类型参数的实例。然而,new()约束改变了这种情况,他要求类型参数必须提供一个无参数的构造函数。在使用new()约束时,可以通过调用该无参构造函数来创建对象。

使用new()约束时应注意两点:

(1)它可以与其他约束一起使用,但是必须位于约束列表的末端。

(2)new()仅允许开发人员使用无参构造函数来构造一个对象,即使同时存在其他的构造函数。换句话说,不允许给类型参数的构造函数传递实参。

0 0
原创粉丝点击