C# 定义泛型类
要定义泛型类,只需要在类定义中包含<>语法即可,例如:
T可以是任意标识符。
泛型类还可以包含多个类型,他们用逗号隔开,例如:
1.default关键字
要确定用于创建泛型的类实例的类型,需要了解一个最基本的情况:它们是引用类型还是值类型。如果不知道类型,就不能用下面的代码给赋予null值。
如果T1是值类型,则上面的代码不能编译。
可以使用default关键字的新方法来解决它:
其结果是,如果innerT1Object是引用类型,就给它赋予null,如果它是值类型,就给它赋予默认值。对于数字类型,这个默认值是0;而结构根据其各个成员的类型,以相同的方式初始化为0或null。
2.约束类型
约束类型使用where关键字来实现。
其中constraint定义了约束。
可以用这种方式提供许多约束!
还可以使用多个where语句,定义泛型类需要的任意类型或所有类型上的约束:
Class myGenericClass <T><br/>{<br/> //这是泛型类的定义方法。<br/>}
T可以是任意标识符。
泛型类还可以包含多个类型,他们用逗号隔开,例如:
Class myGenericClass <T1,t2,t3,t4,…><br/>{<br/> //这是泛型类的定义方法。<br/>}
1.default关键字
要确定用于创建泛型的类实例的类型,需要了解一个最基本的情况:它们是引用类型还是值类型。如果不知道类型,就不能用下面的代码给赋予null值。
<br/>public myGenericClass()<br/>{<br/> innerT1Object=null;<br/>}<br/>
如果T1是值类型,则上面的代码不能编译。
可以使用default关键字的新方法来解决它:
<br/>public myGenericClass()<br/>{<br/> innerT1Object=default(T1);<br/>}<br/>
其结果是,如果innerT1Object是引用类型,就给它赋予null,如果它是值类型,就给它赋予默认值。对于数字类型,这个默认值是0;而结构根据其各个成员的类型,以相同的方式初始化为0或null。
2.约束类型
约束类型使用where关键字来实现。
class myGenericClass <T> where T : constraint<br/>{<br/> ……<br/>}
其中constraint定义了约束。
可以用这种方式提供许多约束!
class myGenericClass <T> where T : constraint1,constaint2<br/>{<br/> ……<br/>}
还可以使用多个where语句,定义泛型类需要的任意类型或所有类型上的约束:
class myGenericClass <T1,T2> where T1: constraint1 where T2: constraint2<br/>{<br/> ……<br/>}
0 条留言
我要留言