色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 淺析C#的多態性

淺析C#的多態性 時間:2018-09-29      來源:未知

什么是多態:同一個操作,作用于不同的對象時,會有不同的結果,即同一個方法根據需要,作用于不同的對象時,會有不同的實現。

C#的多態包括:接口多態,繼承多態。

其中繼承多態又包括通過虛擬方法實現的多態和通過抽象方法實現的多態性

例如:基類動物都有吃的方法,但是不同的動物吃的東西就會不一樣,例如狼吃肉,羊吃草,這樣“吃”的這個方法就要在派生類里面重新實現以下,運行時,通過指向基類的指針,來調用實現派生類中的方法。

1. 接口多態性

把動物“吃”的方法放到一個接口(IAnimal)里,然后讓具體的動物類(Wolf/Sheep)繼承這個接口,并根據自己的需要實現這個接口。

代碼實現:

 

class Program {

        static void Main(string[] args) {

            new Wolf().Eat();

            new Sheep().Eat();

        }

    }

    public class Wolf : IAnimal {

        //多態實現

        public void Eat() {

            Console.WriteLine("狼吃肉!");

        }

    }

    public class Sheep : IAnimal {

        //多態實現

        public void Eat() {

            Console.WriteLine("羊吃草!");

        }

    }

    //接口

    public interface IAnimal {

        void Eat();

    }

接口的多態性就是當不同的類繼承了相同的接口以后,都要根據自己的需要重新實現繼承的接口,這樣同樣的方法簽名在不同的類中就會實現不同的操作。

2. 繼承的多態性

 設想動物園飼養員每天需要給他所負責死樣的獅子、猴子和鴿子喂食。

首先,建立三個類分別代表三個動物

飼養員用Feeder類表示。由于三種動物吃的動物一樣,Feeder類必須擁有三個喂動物的公共方法:

過程如下:

 

static void Main(string[] args)

{

    Monkey m=new Monkey();

    Pigeon p=new Pigeon();

    Lion l=new Lion();

 

    Feeder f=new Feeder();

    f.Name="小李";

    f.FeedMonkey();    //喂猴子

    f.FeedPigeon();    //喂鴿子

    f.FeedLion();        //喂獅子

}

 

如果有又把熊貓交給他管理,這是我們的程序不得不給Feeder類在增加一個方法:FeedPanda();

萬一小李后來又不管猴子了,又要從Feeder類中刪除FeedPigeon()方法。

所以這種編程方式很明顯不合理的。

我們可以應用多態的方法解決。

首先因為它們都是動物,因此,可以建立一個Animal抽象基類。

由于不同的動物吃不同的食物,所以在Animal類中定義一個抽象方法:eat();有子類負責實現。

 

abstract class Animal

{

    public abstract void eat();

}

 

//獅子

class Lion:Animal

{

    public override void eat()

    {

        Console.WriteLine("吃肉");

    }

}

 

//猴子

class Money:Animal

{

    public override void eat()

    {

        Console.WriteLine("吃香蕉");

    }

}

 

//鴿子

class Pigeon:Animal

{

    public override void eat()

    {

        Console.WriteLine("吃大米");

    }

}

 

現在,可以將Feeder類的三個喂養方法合并為一個FeedAnimal:

Feeder類代碼:

 

//飼養員

class Feeder

{

    public String Name;

    public void FeedAnimal(Animal animals)

    {

        animals.eat();

    }

}

 

喂養過程:

 

static void Main(string[] args)

{

    Monkey m=new Monkey();

    Pigeon p =new Pigeon();

    Lion l=new Lion();

 

    Feeder f=new Feeder();

    f.Name="小李";

    f.FeedAnimal(m);//喂猴子

    f.FeedAnimal(p);//喂鴿子

    f.FeedAnimal(l);//喂獅子

}

 

我們修改一下Feeder類的定義,增加一個新方法FeedAnimals(),新方法遠程的功能是喂養一群動物,接受的是Animal的數組:

 

class Feeder

{

    //喂養一群動物

    public voidFeedAnimals(Animal[] ans)

    {

        foreach(Animal an in ans)

        {

            an.eat();

        }

    }

}

 

過程如下:

 

static void Main(string args)

{

    //動物數組

    Animal[] ans={new Monkey(),new Pigeon(), new Lion()};

    Feeder f=new Feeder();

    f.Name="小李";

    f.FeedAnimals(ans);

}

 

代碼中數組ans的元素為Animal,因此,可以在其中存入任何一個Animal的子類。具有這種特性的數組成為"多態數組"。

多態的意義:

編程中應用多態,可以將其簡化為一下兩句:

應用繼承實現對象的統一管理。

應用接口定義對象的行為特征。

使用多態的好處:

當要修改程序并擴充系統時,需要修改的地方較少,對其他部分代碼的影響較小。

上一篇:C++關于面向對象構造方法總結

下一篇:ZigBee的組網流程圖

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区
主站蜘蛛池模板: 欧美在线观看日本一区| 国产男女猛烈无遮挡91| 疯狂欧美牲乱大交777| 在线观看国产精品日韩av| 亚洲自拍偷拍福利| 国产精品偷伦免费视频观看的| 久久久久成人精品| 欧美日韩成人在线播放| 久久亚洲电影天堂| 中文字幕精品一区久久久久| 亚洲欧洲av一区二区| 亚洲精品久久久久国产| 国产精品美女免费看| 亚洲最大福利视频| 亚洲美女自拍视频| 中文字幕在线成人| 8x拔播拔播x8国产精品| 国产精品久久久久7777婷婷| 国产精品久久久久久av下载红粉| 精品福利樱桃av导航| 国产91网红主播在线观看| 亚洲欧美中文日韩在线| 国产精品一二三在线| 亚洲18私人小影院| 日韩欧美高清在线视频| 久久深夜福利免费观看| 国产视频精品自拍| 亚洲qvod图片区电影| 日韩美女在线观看一区| 色综合91久久精品中文字幕| 久久午夜a级毛片| 欧美性xxxxxx| 国产成人福利网站| 国产精品亚洲аv天堂网| 国产视频在线观看一区二区| 91美女片黄在线观看游戏| 日韩免费观看高清| 国产69精品99久久久久久宅男| 欧美日韩国产成人在线观看| 国产亚洲成av人片在线观看桃| 国产成人在线视频|