泛型是占位符,可以代表任何类型,提高代码重用性。
泛型占位符通常用大写字母表示 T的频率最高
泛型类与泛型方法
Class Test1<T>
{
Public T value;
Public void TestFun1(T t)//这个不是泛型方法,T类型在类声明的时候就被确定了
{
//方法体
}
Public void TestFun2<K>(K k)//这个才是泛型方法
{
//方法体
}
}
使用类中的泛型方法时可以不用写<类型> ,会根据传递的类型自动匹配
int main()
{
Test1<int> test = new Test1<int>();
char c = 'a';
test.TestFun1(1);//该被指定了类型为int
test.TestFun2(c);//传入c自动匹配K泛型为char类型
}
泛型约束
关键字: where
六种泛型约束:
1.值类型 where:struct
2.引用类型 where:class
3.存在无参公共构造函数 where:new ()
4.某个类本身或者其派生类
5.某个接口本身或者其派生类型(类或接口)
6.另一个泛型类型本身或者派生类型
Eg;
1.值类型
Class Test1<T> where T:struct
{
Public T value;
Public void TestFun1<K>(K k) where K:struct
{
Console.Write(k);
}
}
int main()
{
Test1<int> test1 = new Test1<int>();
test1.TestFun1<int>(1);
}
2.存在无参构造公共函数的类型可以用类/结构体类型(int,float等),但不能用抽象类和接口,因为它们无法new一个实例
3.另一个泛型约束
Class Test2<T,U> where T:U
{
}
Interface Ifly
{
}
Class Test3:Ifly
{
}
int main()
{
Test2<Test3,Ifly> test2=new Test2<Test3,Ifly>();
}
约束组合使用
Class Test4<T> where T:class,new()
{
}
多个泛型约束
Class Test5<T,K> where T:struct,new() where K:struct
{}