前面讲了泛型接口的好处,现在讨论一下接口中的泛型类型的参数:
首先:我们可以把一个泛型类型的参数约束为多个接口:
下面是个例子:
Code
实际上,这样做好处很多,比喻说,在定义一个方法的参数时,参数的类型指出传递的实参必须是该参数的类型,或者从其派生的类型,如果参数类型是接口,这就表明实参可以是任何一类类型,只要该类实现了这个接口。使用多个接口约束,实际上是让方法指出传递的实参必须实现多个接口。事实上,如果我们将T约束为一个类和两个接口,那就表示传入的实参类型必须是指定基类(或其派生类),而且它还必须实现两个接口。这种灵活性,允许方法实际指定调用方法能传递什么,如果调用方法不满足这些约束,会产生编译错误。
其次,我们对接口有了约束,在传递值类型是,减少装箱操作。实际上,对于接口约束,C#编译器会生成特定的IL指令,这些指令将导致直接在值类型上调用接口方法,不对其进行装箱。