在定义泛型类时,可以限制在实例化类客户端代码的参数类型。当客户端代码使用了被约束的类型来实例化时,会出现编译错误。在本节的内容中,将详细介绍C#泛型约束的基本知识。
在C#中,使用关键字where来实现约束。
1.结构约束
结构约束的类型参数必须是值类型,它几乎可以指定除Nullable以外的所有值类型。结构约束的具体格式如下:
T(类型):结构
2.类约束
类约束的类型参数必须是引用类型,包括所有的类、接口、委托和数组类型。类约束的具体格式如下:
T(类型):类
3.新建约束
新建约束的类型参数必须是具有无参数的公共构造函数,当此约束类型和其他约束类型一起使用时,必须在最后使用新建约束。新建约束的具体格式如下:
T(类型):new()
4.基类约束
基类约束的类型参数必须是指定基类或是派生指定的基类。基类约束的基本格式如下:
T(类型):<基类名>
5.接口约束
接口约束的类型参数必须是指定的接口,或者是正在实现过程中的指定接口。接口约束的具体格式如下:(www.xing528.com)
T(类型):<接口名>
6.裸类约束
通过裸类约束,为T提供的参数必须是为被约束对象提供的参数,或者是派生为被约束对象提供的参数,这被称为裸类约束。裸类约束的具体格式如下所示:
T(类型):u(被约束对象)
在某程度上,编译器必须保证它调用的运算符或调用的方法,能够操作客户端代码指定的类型参数,这样就能够检查泛型列表中某个项,以确定这个项是否有效,或和它的其他项进行比较。
实例57:使用泛型类型约束的方法
下面通过一个具体的实例来说明使用泛型类型约束的具体流程。本实例保存在“光盘:\daima\13”文件夹内,项目名为fanyueshu。实例的功能是根据定义的泛型类,调用类内的方法并对其进行处理,并输出处理后的文本。实例文件的主要代码如下:
上述实例代码的设计流程如下。
1)定义类mm。
2)在类mm内设置属性name,并返回name值。
3)定义方法shuchu(),设置其参数s为string类型。
4)定义泛型类nn,设置其泛型类型为T。
5)定义数组names,并定义方法Add()向数组内添加数据。
6)通过foreach语句逐一读取添加后的数组数据,并将数据输出。
7)定义mm类型对象tt,然后调用输出函数输出显示处理后的数据。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。