C# - Generic

定义泛型类

创建泛型类,在类定义中包含尖括号语法

class MyGenericClass<T>

{

...

}

T可以是任意标识符,只要遵循通常的C#命名规则即可。泛型类可以在其定义中包含多个类型,用逗号分隔开

class MyGenericClass<T1, T2, T3>

{

...
}

定义了这些类型后,就可以在类定义中像使用其他类型那样使用它们。

如果把构造函数改为 innerT1Object = new T1();编译会出错,因为当前不知道T1是什么,也不能使用它的构造函数,甚至可能没有构造函数。

default关键字

如果像这样赋值innerT1Object = null;编译会出错,因为此时不知道此类型是值类型还是引用类型那么可以用default关键字解决这个问题。

innerT1Object = default(T1) 如果innerT1Object是引用类型,就给它赋予null值,如果它是值类型,就给它赋予相应的默认值。

约束类型

前面用于泛型类的类型称为无绑定类型,因为没有对它们进行任何约束。而通过约束类型,可以限制可用于实例化泛型类的类型。可以把类型限制为继承自某个类型。

在类定义中,可以使用where关键字来实现。

class MyGenericClass<T1, T2>: MyBaseClass, IMyInterface

where T1 : constraint1 where T2 : constraint2

{

...

}

如果new() (类型必须有一个公共的无参构造函数)用作约束,它就必须是为类型指定的最后一个约束。

可以通过base-class约束,把一个类型参数用作另一个类型参数约束。

class MyGenericClass<T1, T2> where T2 : T1

{

...

}

T2必须与类型T1的类型相同,或者继承自T1。这称之为裸类型约束。类型约束不能循环。

 

 

 

 

posted @ 2013-11-13 17:27  Lilideng  阅读(765)  评论(0编辑  收藏  举报