泛型类 某型类的模子,某型可根据需要变化
<T> T代表某类型,T就是个占位子的,类似于数学方程中的一个X
public class Cage<T>//泛型类 T代 类的类型 可以代表Dog Cage/Cat Cage等等 { 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); } } } abstract public class Pet { protected string Name; protected int Age; public Pet(string name) { Name = name; Age = 0; } public void PrintName() { Console.WriteLine("Print" + Name); } public static Pet operator ++(Pet pet) { ++pet.Age; return pet; } public void ShowAge() { Console.WriteLine(Name+ " Age = " + Age); } abstract public void Speak(); } public class Dog : Pet { static int Num; static Dog() { Num = 0; } public Dog(string name) : base(name) { ++Num; } new public void PrintName() { Console.WriteLine("子print名字是 " + base.Name); } sealed override public void Speak() Console.WriteLine("子说,我是狗狗 " + Name); } static public void ShowNum() { Console.WriteLine("Dog's number = " + Num); } public void Lost() { --Num; Console.WriteLine(Name + " is Lost!"); } public static implicit operator Cat(Dog dog) { return new Cat(dog.Name); } } class Program { static void Main(string[] args) { var dogCage = new Cage<Dog>(1);//泛型的实例化 dogCage.PutIn(new Dog("DD4")); dogCage.PutIn(new Dog("DD5")); Dog DD = dogCage.TakeOut(); DD.PrintName(); Dog DD_1 = dogCage.TakeOut(); } }