泛型
泛型:模具,可以塑造很多产品。
class Cage<T>//用T可以直接替换多种类型
{
T[] petsArray;
public void Putln(T pet){}
public T TakeOut(int index){}
}
class DogCage
{
Dog[] petsArray;
public void Putln(Dog pet){}
public Dog TakeOut(int index){}
}
class CatCage
{
Cat[] petsArray;
public void Putln(Cat pet){}
public Cat TakeOut(int index){}
}
var dogCage=new Cage<Dog>();
var catCage=new Cage<Cat>();
需要多种方式使用的时候,就可以直接用T来实例化进行使用。
T可以是object,类型会比较宽泛,需要显式转换类型。
class Cage<T>{}//泛型类声明
Cage<Dog> dogCage;//Cage<Dog>类型的引用
dogCage=new Cage<Dog>();//构造实例
多次实例化就可以使用,只要维护模板,易于维护。
public class Cage<T>
{
T[] array;
readonly int Size;
int num;
public Cage(int n)
{
Size =n;
num=0;
array=new T[Size];
}
public void Putin(T pet)
{
if(num<Size)
{
array[num++]=pet;
}
else
{
Console.writeLine("cage is full");
}
}
public T TakeOut()
{
if(num>0)
{
return array[--num];
}
else
{
Console.writeLine("cage is empty");
return default(T);
}
}
var dogCage=new Cage<Dog>(1);//定义只有一个
dogCage.Putin(new Dog("A"); //只放进去一个
var dog=dogCage.TakeOut();//把A取出来
dog.PrintName();
通过上述的操作,只需要定义一个就可以后续替换,多次实例化来进行使用。
泛型方法
泛型方法就是方法的模型,给定具体的类型,就可以实例化出一个操作该类型的具体方法。
class Dog
{
void DogIsHappy<T>(T target){}
}
public void IsHappy<T>(T target)//在类中定义一个泛型方法
{
Console.WriteLine("Happy:"+target.ToString());
}
var dog=new Dog("a");//使用如下方
dog.IsHappy<Person>(new Person());
dog.IsHappy<int>(3);
约束
约束就是减少泛型参数的范围,使用后可以调用具体的方法。
对类名、class、struct、接口名、new()都可以进行约束。
约束可以叠加多个进行约束。
主约束:类名、class、struct——只能使用一个
接口约束:可以任意多个
构造约束:new()
void Cage<T>
where T:Pet,IClimbTress,new(){}//where说明对T增加约束
public void IsHappy<T>(T target)where T:class
{
Console.WriteLine("Happy:"+target.ToString());
}
var dog=new Dog("a");//使用如下方
dog.IsHappy<Person>(new Person());
dog.IsHappy<int>(3);//应为加了where,不能用int,必须使用类
泛型接口
将接口成员的参数和返回类型设置为泛型参数的接口。
interface IMyself<T>
{
T Myself(T self);
}
class A:IMyself<A>//可以是实现类本身或者其他类型
{
public A Myself(A self);
}
举例:
interface ILearn <A>
{
void Act(A cmd);//学习技能的接口
}
class Labrador:Dog,ILearn<Sit>
{
public void Act(Sit cmd);
}
总结
学习记录
https://www.imooc.com/video/14238
https://www.imooc.com/video/14239
https://www.imooc.com/video/14240
https://www.imooc.com/video/14241