ASP.NET泛型约束
ASP.NET泛型约束一、指定泛型参数为值类型,即 T:结构
1、类型参数必须是值类型。可以指定除 Nullable 以外的任何值类型。
2、例如:
class MyList<T> where T:struct
{
...代码省略部分
}
3、 实例化类时: MyList<int> list = new MyList<int>();
二、指定泛型参数为引用类型,即 T:类
1、类型参数必须是引用类型,包括任何类、接口、委托或数组类型。
2、例如:
class MyList<T> where T:class
{
...代码省略部分
}
3、 实例化类时: MyList<Birds> list = new MyList<Birds>();
三、指定泛型参数有无参的公共的构造函数,即 T:new()
1、类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时,new() 约束必须最后指定。
2、例如:
class MyList<T> where T:new()
{
...代码省略部分
}
3、实例化时:
(1)、为Person类增加私有的无参构造函数:
class Person { public string Name { get; set; } public Person() //必须包含 { //do nothing } }
(2)、MyList<Person> list = new MyList<Person>();
四、 指定泛型参数必须派生于指定基类,即 T:<基类名>
1、类型参数必须是指定的基类或派生自指定的基类。
2、实例:
(1)、增加抽象类Animal
abstract class Animal
{
public abstract void A();
public abstract void B();
}
(2)、使Birds类继承自Animal类
class Bird : Animal
{
public string Name { get; set; }
public override void A()
{
}
public override void B()
{
}
}
(3)、指定泛型参数必须派生于基类Animal
3、实例化时:MyList<Person> list = new MyList<Person>();
五、指定泛型参数必须实现指定接口,即 T:<接口名称>
1、类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。
2、和第四点类似。
六、指定泛型参数必须派生于泛型类型U,即 T:U
1、为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。这称为裸类型约束。
2、例如:
class MyList<U> where U : SeniorAnimal
{
List<U> list = new List<U>();
public void ShowInfo<T>() where T : U
{
}
}