C#学习系列之泛型类、泛型方法、约束、泛型接口

C#学习系列之泛型类、泛型方法、约束、泛型接口


泛型

泛型:模具,可以塑造很多产品。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值