泛型

泛型类 某型类的模子,某型可根据需要变化

<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();
        }

    }

 

posted @ 2019-05-28 14:05  pu409  阅读(99)  评论(0编辑  收藏  举报