当前位置 : 主页 > 网络编程 > net编程 >

C# 泛型

来源:互联网 收集:自由互联 发布时间:2023-08-29
概述 、泛型是一种类型参数化的概念。一个功能,传递不同的类型参数,可以操作多种数据类型 、泛型是一种延迟思想。在编译时,将类型参数生成占位符 ,在运行时,即时编译器(

概述

、泛型是一种类型参数化的概念。一个功能,传递不同的类型参数,可以操作多种数据类型

、泛型是一种延迟思想。在编译时,将类型参数生成占位符 ,在运行时,即时编译器(Just In Time - JIT)根据实际类型参数,将占位符替换过来

、泛型是 C# 2 推出的新功能

特性

、性能:泛型类 List 不使用对象,在使用时定义类型,避免装箱和拆箱操作,提高了性能

、类型安全:泛型类 List 定义了指定类型,只能添加指定类型数据

、二进制代码重用:泛型类定义一次,可以使用不同的类型实例化

约束

、where T:struct  类型参数必须是不可为 null 值类型。不能与 new() 和 unmanaged 结合使用

、where T:class  类型参数必须是引用类型。还应用于任何类、接口、委托或数组类型

、where T : class?  类型参数必须是可为 null 或不可为 null 的引用类型

、where T : notnull  类型参数必须是不可为 null 的类型

、where T : unmanaged  类型参数必须是不可为 null 的非托管类型。 不能与 struct 或 new() 结合使用

、where T:new()  类型参数必须具有公共无参数构造函数。 与其他约束一起使用时,必须最后指定。不能与 struct 和 unmanaged 结合使用

、where T:<基类名>  类型参数必须是指定的基类或派生自指定的基类

、where T:<接口名>  类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型

、where T:U  为 T 提供的类型参数必须是,为 U 提供的参数或派生自为 U 提供的参数

、where T : default  重写方法或提供显式接口实现时,如果需要指定不受约束的类型参数,此约束可解决歧义。 default 约束表示基方法,但不包含 class 或 struct 约束

泛型方法

、定义泛型方法,在方法名后面加上 , T 代表参数类型

例:void Method(T param)

、泛型方法的参数不确定类型,调用时根据传递的参数来确定类型

泛型类

、定义泛型类,在类名后面加上 ,也可指定多个类型,类型可以添加约束

例:

class Method

class Method where T:class

class Method<T1,T2>

class Method<T1,T2> where T:class where T:class


网友评论