国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

C#基礎鞏固(1)-多態(tài)+簡單工廠

2019-11-14 13:54:20
字體:
來源:轉載
供稿:網友

多態(tài) 

如果要簡要的描述多態(tài)的話,我個人是這樣理解的:通過繼承,父類定義方法,具休的實現由子類進行。

01代碼

 //父類    class Person    {        public  virtual void  skill()  //vitrual -虛方法,方法可被重寫        {            Console.WriteLine("人會走路");        }    }    class Xiaoming:Person     {        public override void skill() //重寫父類方法        {            Console.WriteLine("小明會唱歌");        }    }    class XiaoHu : Person    {        public override void skill()        {            Console.WriteLine("小虎會游泳");        }    }    class PRogram    {        static void Main(string[] args)        {            Person p1 = new Xiaoming();//里氏轉換原則 可以將子類賦值給父類            Person p2 = new XiaoHu();            p1.skill();            p2.skill();            Console.ReadKey();        }    }

輸出:

 通過這個例子 Person 類定義了skill方法,方法的具體實現由子類進行。

 

02如果不重寫的話

即 如果子類的 override 改為new  那么父類和子類的方法是獨立的,此時執(zhí)行下面的代碼

 //父類    class Person    {        public  virtual void  skill()        {            Console.WriteLine("人會走路");        }    }    class Xiaoming:Person     {        public new  void skill() //重寫父類方法        {            Console.WriteLine("小明會唱歌");        }    }       class Program    {        static void Main(string[] args)        {            Person p1 = new Xiaoming();//里氏轉原則            Xiaoming p2 = new Xiaoming();            p1.skill();            p2.skill();            Console.ReadKey();        }    }

輸出:

可以看出,p.skill();這里看.前面的對象,是什么類型的,就執(zhí)行那個類里里面的 skill()方法,這里P1是Person類的,P2是Xiaoming類的。

多態(tài)+簡單工廠

如果我想通過輸入 小明,小虎。 這時候系統(tǒng)自動給顯示小明會什么,小虎會什么出來。

那么首先增加一個工廠類

生活中工廠是用來加工的產品的,同樣這里也是根據傳入的參數,加工后返回對應的結果

全部代碼

//父類    class Person    {        public  virtual void  skill()        {            Console.WriteLine("人會走路");        }    }    class Xiaoming:Person //繼承Person    {        public override  void skill() //重寫父類方法        {            Console.WriteLine("小明會唱歌");        }    }    class XiaoHu : Person    {        public override void skill()        {            Console.WriteLine("小虎會游泳");        }    }    //工廠類 --新增    class Factory    {        public static Person instance(string Name)        {            switch (Name)            {                case "1": return new Xiaoming();                case "2":return new XiaoHu();                default: return null;            }        }    }    class Program    {        static void Main(string[] args)        {            Console.WriteLine("請輸入序號查看技能,輸入1、2....");            Console.WriteLine("1.小明");            Console.WriteLine("2.小虎");            Console.WriteLine("輸入:");            string res = Console.ReadLine();            Console.WriteLine("結果:");            Person p = Factory.instance(res);            if (p != null)            {                p.skill();            }            else            {                Console.WriteLine("沒找到這個人");            }            Console.ReadKey();        }    }

 

執(zhí)行結果:

此時,多態(tài)+簡單工廠就已經實現了。

拓展1:抽象(abstract)實現多態(tài)

   1. 前面的 virtual(虛方) 實現多態(tài)已經完成了,其實 抽象(abstract)實現多態(tài)也是大同小異

   2. abstract 和virtual的區(qū)別在于abstract 沒有方法體,方法都可以被重寫。

  實現:把上面完整的代碼 的父類改成 下面就完成了,功能一樣。

 //父類   abstract  class Person    {        public abstract void skill();//方法沒有方法體            }

拓展2:接口(interface)實現多態(tài)

 1.這里就不是繼承了,是實現接口的方法。

 2.接口的方法和抽象一樣沒有方法體。

實現:把上面完整的代碼的父類改成接口

 //接口   interface  Person    {         void  skill();    }

然后把原來子類的 override 去掉 ,因為接口(interface)是不能被重寫(override)的。虛方法(virtual),抽象(abstract)才能被重寫

OK,接口實現多態(tài)也是完成了。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 贞丰县| 广灵县| 三河市| 太湖县| 梅河口市| 乐昌市| 上饶市| 灵山县| 建湖县| 中卫市| 双桥区| 长沙县| 澜沧| 鹤峰县| 区。| 青神县| 康马县| 深水埗区| 枣庄市| 东乡县| 南汇区| 镇赉县| 东乌珠穆沁旗| 揭阳市| 射洪县| 铜鼓县| 喀什市| 临澧县| 乌兰察布市| 石景山区| 都匀市| 陈巴尔虎旗| 宜宾市| 保山市| 顺平县| 高密市| 赤城县| 惠来县| 长海县| 奇台县| 郸城县|