麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

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

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

多態 

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

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  那么父類和子類的方法是獨立的,此時執行下面的代碼

 //父類    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();這里看.前面的對象,是什么類型的,就執行那個類里里面的 skill()方法,這里P1是Person類的,P2是Xiaoming類的。

多態+簡單工廠

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

那么首先增加一個工廠類

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

全部代碼

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

 

執行結果:

此時,多態+簡單工廠就已經實現了。

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

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

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

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

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

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

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

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

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

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

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

OK,接口實現多態也是完成了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: av在线直播观看 | 7777在线视频免费播放 | 27xxoo无遮挡动态视频 | 久久久久国产成人免费精品免费 | 亚洲免费视 | 99视频在线观看视频 | 中文字幕在线观看91 | 丁香天堂网 | 久久精品中文字幕一区二区三区 | 久久九九热re6这里有精品 | china对白普通话xxxx | 国产1区2区3区中文字幕 | 国产一级爱c视频 | 久久久久久久一区二区 | 亚洲欧美在线视频免费 | 91av久久| 精品亚洲一区二区 | 日韩精品中文字幕一区二区 | 天天色综合6 | 国产成年人在线观看 | 在火车上摸两乳爽的大叫 | 亚洲资源在线播放 | 中文日韩在线视频 | 久久精品99久久久久久2456 | 国产精品6区 | 午夜视频你懂的 | 九九热国产视频 | 欧美3p激情一区二区三区猛视频 | 失禁高潮抽搐喷水h | 久草在线视频网 | 性看小视频 | 亚州综合图片 | 久久精品亚洲一区二区三区观看模式 | 成人午夜在线免费 | 草莓视频久久 | 日韩黄色一级视频 | 国产电影av在线 | 日韩精品网站在线观看 | 欧美日韩后 | 久草欧美 | 最新黄色电影网站 |