定义泛型类

来源:互联网 发布:佳能ip7280清零软件 编辑:程序博客网 时间:2024/05/18 16:19

 

......又是继承又是实现接口 看得我累崩了 汗...真够绕啊

Code:
  1. public abstract class Animal   
  2.   {   
  3.       protected string name;   
  4.   
  5.       public string Name   
  6.       {   
  7.           get  
  8.           {   
  9.               return name;   
  10.           }   
  11.           set  
  12.           {   
  13.               name = value;   
  14.           }   
  15.       }   
  16.   
  17.       public Animal()   
  18.       {   
  19.           name = "The animal with no name";   
  20.       }   
  21.   
  22.       public Animal(string newName)   
  23.       {   
  24.           name = newName;   
  25.       }   
  26.   
  27.       public void Feed()   
  28.       {   
  29.           Console.WriteLine("{0} has been fed.", name);   
  30.       }   
  31.   
  32.       public abstract void MakeANoise();   
  33.   
  34.   
  35.   }   
  36.   
  37.   public class Chicken : Animal   
  38.   {   
  39.       public void LayEgg()   
  40.       {   
  41.           Console.WriteLine("{0} has laid an egg.", name);   
  42.       }   
  43.   
  44.       public Chicken(string newName)   
  45.           : base(newName)   
  46.       {   
  47.       }   
  48.   
  49.       public override void MakeANoise()   
  50.       {   
  51.           Console.WriteLine(" {0} says 'Cluck!'", name);   
  52.       }   
  53.   }   
  54.   
  55.   public class Cow : Animal   
  56.   {   
  57.       public void Milk()   
  58.       {   
  59.           Console.WriteLine("{0} has been milked.", name);   
  60.       }   
  61.   
  62.       public Cow(string newName)   
  63.           : base(newName)   
  64.       {   
  65.       }   
  66.   
  67.       public override void MakeANoise()   
  68.       {   
  69.           Console.WriteLine(" {0} syas 'moo'.", name);   
  70.       }   
  71.   }   
  72.   
  73.   
  74.   public class SuperCow:Cow   
  75.   {   
  76.       public void Fly()   
  77.       {   
  78.           Console.WriteLine(" {0} is flying!", name);   
  79.       }   
  80.   
  81.       public SuperCow(string newName)   
  82.           : base(newName)   
  83.       {   
  84.       }   
  85.   
  86.       public override void MakeANoise()   
  87.       {   
  88.           Console.WriteLine("{0} says 'here I come to save the day!'", name);   
  89.       }   
  90.   }   
  91.   
  92.   
  93.   public class Farm<T> : IEnumerable<T>   
  94.       where T:Animal   
  95.   {   
  96.       private List<T> animals = new List<T>();   
  97.   
  98.   
  99.       //只读属性   
  100.       public List<T> Animals   
  101.       {   
  102.           get { return animals; }   
  103.       }   
  104.   
  105.       //实现IEnumerable<T>.GetEnumerator()  
  106.       public IEnumerator<T> IEnumerable<T>.GetEnumerator()   
  107.       {   
  108.           return animals.GetEnumerator();   
  109.       }   
  110.       //实现 IEnumerable.GetEnumerator()   
  111.       IEnumerator IEnumerable.GetEnumerator()   
  112.       {   
  113.           return animals.GetEnumerator();   
  114.       }   
  115.   
  116.       public void MakeNoises()   
  117.       {   
  118.           foreach (T animal in animals)   
  119.           {   
  120.               //由于做了约束   
  121.               animal.MakeANoise();   
  122.           }   
  123.       }   
  124.   
  125.       /// <summary>   
  126.       ///提取是 Cow或继承自Cow的项   
  127.       /// </summary>   
  128.       /// <returns></returns>   
  129.       public Farm<Cow> GetCows()   
  130.       {   
  131.           Farm<Cow> cowFarm = new Farm<Cow>();   
  132.           foreach (T animal in animals)   
  133.           {   
  134.               if (animal is Cow)   
  135.               {   
  136.                   cowFarm.Animals.Add(animal as Cow);   
  137.               }   
  138.           }   
  139.           return cowFarm;   
  140.       }   
  141.   
  142.       public void FeedTheAnimals()   
  143.       {   
  144.           foreach (T animal in animals)   
  145.           {   
  146.               animal.Feed();   
  147.           }   
  148.       }   
  149.   
  150.   }   

原创粉丝点击