目录
1.什么是泛型约束?
让泛型的类有一定的限制。
关键字:where
泛型约束有6种:
值类型 where泛型字母:struct
引用类型 where泛型字母:class
存在无参公共构造函数 where泛型字母:new()
某个类本身或者其派生类 where泛型字母:类名
某个接口的派生类型 where泛型字母:接口名
另一个泛型类型本身或者派生类型 where泛型字母:另一个泛型字母
2.各泛型约束讲解
值类型约束
class Test1<T> where T:struct
{
public T value;
public void TestFun<K>(K v) where K:struct
{
}
}
t.TestFun("123");
t.TestFun<float,double>(1.4f);
Test1<int> t1=new Test<int>();
t1.TestFun<float>(1.3f);
引用类型约束
class Test2<T> where T:class
{
public T value;
public void TestFun<K>(K k)where K:class
{
}
}
Test2<Random> t2=new Test2<Random>();
t2.value=new Random();
t2.TestFun<object>(new object());
无参公共构造函数约束
①必须是无参构造函数,如果结构体中编写有参函数,无参构造函数不会被顶替。
②必须是公共的
③必须是非抽象类型,因为抽象类型不能够去new它。
类约束
必须是子类或者派生类才不会报错
class Test4<T> where T:Test1
{
public T value;
public void TestFun<K>(K k) where K:Test1
{
}
}
接口约束
class Test4:IFly
{
}
class Test5<T> where T:IFly
{
public T value;
public void TestFun<K>(K k)where K:IFly
{
}
}
某个接口的派生类
另一个泛型约束
class Test6<T,U>where T:U
{
public T value;
public void TestFun<K k> where K;V
{
}
}
3.约束的组合使用
通过逗号组合使用
class Test7<T> where T:class,new()
{
}
4.多个泛型约束
class Test8<T,K> where T:class,new() whereK:struct
{
}
注意:多个泛型约束用where连接即可。