繼上一篇代碼向上轉型實現多態

static class Program
 {
     /// <summary>
     /// 應用程序的主入口點。
     /// </summary>
     [STAThread]
     static void Main()
     {
         OptertorAdd op = new OptertorAdd();
         op.GetResult(1, 2);
     }
 }

 /// <summary>
 /// 父類 Created:ChenHu  date:2013326
 /// </summary>
 public class Opreator
 {
     //不想暴漏在外的私有變量可以用屬性封裝起來
     private double _numA;
     private double _numB;

     public double NumA
     {
         get { return _numA; }
         set { _numA = value; }
     }

     public double NumB
     {
         get { return _numB; }
         set { _numB = value; }
     }

     public virtual double GetResult(int a, int b)
     {
         double result = 0;
         //------------------------------------------
         //TODO:可以處理需要影藏的邏輯,這也是new或則說虛方法隱藏的邏輯的一種手段,隱藏的邏輯可以是員工的薪資計算等保密操作
         //------------------------------------------
         result = _numA + _numB;
         return result;
     }
 }

 /// <summary>
 /// 派生類  Created:ChenHu  date:2013326
 /// </summary>
 class OptertorAdd : Opreator
 {
     public override double GetResult(int a, int b)
     {
         //這裏base的邏輯可以放在自己邏輯之前也可以放在自己邏輯的後面
         //這裏的位置其實很有講究哦,邏輯不對可能會引起報錯。
         //如把base邏輯放在自己邏輯之前,在父類中 _numA + _numB=0;因爲你還沒賦值
         base.GetResult(a, b);
         NumA = a;
         NumB = b;
         double result = 0;
         result = NumA + NumB;
         //父類邏輯在此位置  _numA + _numB=3;
         //base.GetResult(a, b); 
         return result;

     }
 }


 /// <summary>
 ///首先創建一個工廠,這裏我們通過向上轉型實現多態
 ///這裏我們試用靜態字段的原因就是:
 ///這個類可能調用的次數很大,我們最好讓其閒在內存加載好
 /// </summary>
 /// <remarks>
 /// 可以這樣理解多態:一個賣豬肉的爹生了好幾個兒子(兒子都具有爹的基因此爲繼承),
 /// 每個兒子的工作都不一樣,有賣西瓜的賣土豆的,這個時候,
 /// 如果爹想吃西瓜了就會找到賣西瓜的兒子要,如果想吃土豆也是一樣的。如果想吃豬肉,
 /// 但是沒有賣肉的兒子怎麼辦呢? 呵呵 生一個賣豬肉的兒子就行了,雖然有點誇張,但是這是多態的本質。
 /// </remarks>
 public static class OptetaionFactory
 {
     /// <summary>
     /// Frank 2013327
     /// </summary>
     /// <param name="oper">計算符號,根據不同的符號返回不同的計算類實體</param>
     /// <returns>計算類</returns>
     public static Opreator OptertCreate(String oper)
     {
         Opreator opretaor = null;
         switch (oper)
         {
             case "+":
                 //向上轉型:子類->父類
                 opretaor = new OptertorAdd();
                 break;
                 //TODO:這裏可以根據需要然後從父類派生出更多的子類實例:這就是多態了
         }
         return opretaor;
     }
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章