泛型约束
泛型约束的概念
让泛型的类型有一定限制
值类型: where 泛型字母 : struct
引用类型: where 泛型字母 : class
存在无参公共构造函数: where 泛型字母 : new()
某个类本身或者其派生类: where 泛型字母 : 类名
某个接口的派生类型: where 泛型字母 : 接口名
另一个泛型类型本身或者其派生类型: where 泛型字母 : 另一个泛型字母
//值类型约束
class Test1<T> where T : struct
{
public T value;
public void TestFunc<K>(K k) where K : struct
{
}
}
//引用类型约束
class Test2<T> where T : class
{
public T value;
public void TestFunc<K>(K k) where K : class
{
}
}
//公共无参构造约束
//抽象函数不能使用
class Test3<T> where T : new()
{
public T value;
public void TestFunc<K>(K k) where K : new()
{
}
}
class TestClass
{
}
Test3<TestClass> t3 = new Test3<TestClass>();
//类约束
//必须是Test1或者Test1的子类
class Test4<T> where T : Test1
{
public T value;
public void TestFunc<K>(K k) where K : Test1
{
}
}
//接口约束
interface IFly
{
}
class Test5<T> where T : IFly
{
public T value;
public void TestFunc<K>(K k) where K : IFly
{
}
}
//另一个泛型约束
//T要不是U的本身类型,或者T是U的派生类型
class Test6<T,U> where T : U
{
public T value;
public void TestFunc<K,M>(K k) where K : M
{
}
}
//约束的组合使用
class Test6<T> where T : class,new()
{
}
//多个泛型有约束
class Test6<T,U> where T : class,new() where K:struct
{
}
复习
//索引器
public T this[int index]
{
get
{
return array[index]
}
set
{
array[index] = value;
}
}

浙公网安备 33010602011771号