C#面向对象入门知识(二)
泛型
泛型类
定义:泛型类就是一个模子,装入类型的材料,可以塑造出想要的产品。
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");
}
}
}
//
var dogCage =new Cage<Dog>(1);
dogCage.putin(new Dog("A"));
泛型方法
定义:泛型方法就是方法的模型,给定具体的类型,就可以实例化出一个操作该类型的具体方法。(泛型类中往往有泛型方法,普通类也可以有泛型方法。)
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);
约束
定义:约束就是控制泛型的缰绳,缩小泛型的参数范围。
意义:只有添加了约束(泛型类和方法都可以添加约束),才能调用泛型参数中(比如T)的方法。
约束的类型:类名(该类或者继承该类的类),class(任何类),struct(任何值),接口名(该接口类型或任何实现该接口的类型),new(带有无参构造函数的类)
约束叠加规则:A.主约束(类名,class,struct,只能有一个),B.接口约束(任意多个),C.构造约束。如:
void Cage<T>
where T:Pet,IclimbTree,new();
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); 会报错,因为int不是类类型。
泛型接口
泛型接口允许我们将接口成员的参数和返回类型设置为泛型参数的接口。
语法:
interface IMyself(T){
T Myself(T self);
}
实现泛型接口语法
class A:IMyself<A>{
public A Myself(A self);
}
public class SitDogCmd:DogCmd
{
public override string GetCmd()
{
return "sit";
}
}
//
public interface IDogLearn<C> where C:DogCmd
{
void Act(C cmd);
}
//
public class Labrador:Dog,IDogLearn<SitDogCmd>
{
public Labrador(string )(name)
{
}
public void Act(SitDogCmd cmd)
{
Console.WriteLine(cmd.GetCmd());
}
}
//
Labrador dog = new Labrador("A");
dog.Act(new SitDogCmd());