最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中面向?qū)ο缶幊虣C(jī)制之多態(tài)學(xué)習(xí)筆記

 更新時間:2015年01月20日 09:54:22   投稿:junjie  
這篇文章主要介紹了C#中面向?qū)ο缶幊虣C(jī)制之多態(tài)學(xué)習(xí)筆記,本文總結(jié)了個人對多態(tài)的理解以及接口多態(tài)、繼承多態(tài)等內(nèi)容,并給出了代碼示例,需要的朋友可以參考下

C#的多態(tài)性:

我的理解是:同一個操作,作用于不同的對象時,會有不同的結(jié)果,即同一個方法根據(jù)需要,作用于不同的對象時,會有不同的實現(xiàn)。

C#的多態(tài)包括:接口多態(tài),繼承多態(tài)。

其中繼承多態(tài)又包括通過虛擬方法實現(xiàn)的多態(tài)和通過抽象方法實現(xiàn)的多態(tài)性

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

接下來舉例實現(xiàn)多態(tài)性。

1. 接口多態(tài)性

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

代碼實現(xiàn):

復(fù)制代碼 代碼如下:

class Program {
        static void Main(string[] args) {
            new Wolf().Eat();
            new Sheep().Eat();
        }
    }

    public class Wolf : IAnimal {
        //多態(tài)實現(xiàn)
        public void Eat() {
            Console.WriteLine("狼吃肉!");
        }
    }

    public class Sheep : IAnimal {
        //多態(tài)實現(xiàn)
        public void Eat() {
            Console.WriteLine("羊吃草!");
        }
    }

    //接口
    public interface IAnimal {
        void Eat();
    }

接口的多態(tài)性就是當(dāng)不同的類繼承了相同的接口以后,都要根據(jù)自己的需要重新實現(xiàn)繼承的接口,這樣同樣的方法簽名在不同的類中就會實現(xiàn)不同的操作。

2. 繼承的多態(tài)性

2.1.通過虛擬方法實現(xiàn)的多態(tài)(virtual,override)

   首先要在基類中實現(xiàn)virtual方法,然后在派生類中根據(jù)自己的需要用override重寫virtual方法。如果不希望這個方法被繼續(xù)重寫,則把這個方法寫成sealed方法。

  virtual方法必須在基類中實現(xiàn)。

  代碼實現(xiàn):

 

復(fù)制代碼 代碼如下:

  class Program {
        static void Main(string[] args) {
            new Wolf().Eat();
            new Sheep().Eat();
            new Goat().Eat();
        }
    }

    public class Wolf : Animal {
        //多態(tài)實現(xiàn)
        public override void Eat() {
            base.Eat();
            Console.WriteLine("狼吃肉!");
        }
    }

    public class Sheep : Animal {
        //多態(tài)實現(xiàn)
        public override void Eat() {
            base.Eat();
            Console.WriteLine("羊吃草!");
        }
    }

    public class Goat : Sheep {
        //多態(tài)實現(xiàn)被終結(jié),此Eat方法不能被override,因為用sealed了
        public sealed override void Eat() {
            //base.Eat();
            Console.WriteLine("山羊吃草!");
        }
    }

    //基類實現(xiàn)虛方法
    public class Animal {
        public virtual void Eat() { }
    }
 

  2.2.通過抽象方法實現(xiàn)的多態(tài)(abstract,override)

抽象方法必須定義在抽象類里。抽象類不能被創(chuàng)建實例。

基類中的抽象方法只能被聲明,不需要實現(xiàn),所以派生類中重寫抽象方法的時候沒有base方法。

代碼實現(xiàn)如下:

復(fù)制代碼 代碼如下:

class Program {
        static void Main(string[] args) {
            new Wolf().Eat();
            new Sheep().Eat();
            new Goat().Eat();
        }
    }

    public class Wolf : Animal {
        //多態(tài)實現(xiàn)
        public override void Eat() {
            Console.WriteLine("狼吃肉!");
        }
    }

    public class Sheep : Animal {
        //多態(tài)實現(xiàn)
        public override void Eat() {
            Console.WriteLine("羊吃草!");
        }
    }

    public class Goat : Sheep {
        //多態(tài)實現(xiàn)被終結(jié),此Eat方法不能被override,因為用sealed了
        public sealed override void Eat() {
            Console.WriteLine("山羊吃草!");
        }
    }

    //基類只需聲明方法
    public abstract class Animal {
        public abstract void Eat();
    }

總結(jié):

1.虛方法重寫的時候可以有base方法(base.Eat()),抽象方法重寫的時候沒有base方法,原因是:虛方法必須在基類中實現(xiàn),抽象方法只在基類中聲明,不需要實現(xiàn)。

2.派生類中可以 不重寫虛方法的實現(xiàn),但是派生類必須重寫抽象方法的實現(xiàn),原因同1.

3.包含虛方法的非抽象類可以被創(chuàng)建實例(對象),但是包含抽象方法的抽象類不能被創(chuàng)建實例。

4.繼承接口的派生類必須實現(xiàn)接口的方法,因為接口也是只負(fù)責(zé)聲明方法,不負(fù)責(zé)實現(xiàn)。

5.接口的多態(tài)性不需要用override重寫方法。

相關(guān)文章

  • C#對Access進(jìn)行增刪改查的完整示例

    C#對Access進(jìn)行增刪改查的完整示例

    本文主要是講C#對Access數(shù)據(jù)庫的增刪改查操作,想學(xué)習(xí)C#和Access數(shù)據(jù)庫操作基礎(chǔ)的可以參考借鑒,以下代碼都經(jīng)過實踐測試可用,下面跟著小編一起來看看。
    2016-08-08
  • c# 以類名為參創(chuàng)建父類相同的類的實例代碼

    c# 以類名為參創(chuàng)建父類相同的類的實例代碼

    下面小編就為大家?guī)硪黄猚# 以類名為參創(chuàng)建父類相同的類的實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C#中獲取二維數(shù)組的行數(shù)和列數(shù)以及多維數(shù)組各個維度的長度

    C#中獲取二維數(shù)組的行數(shù)和列數(shù)以及多維數(shù)組各個維度的長度

    這篇文章介紹了C#中獲取二維數(shù)組的行數(shù)和列數(shù)以及多維數(shù)組各個維度的長度,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Unity實現(xiàn)微信聊天框界面

    Unity實現(xiàn)微信聊天框界面

    這篇文章主要為大家詳細(xì)介紹了Unity實現(xiàn)微信聊天框界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • .Net筆記:System.IO之Stream的使用詳解

    .Net筆記:System.IO之Stream的使用詳解

    本篇文章是對.Net中System.IO之Stream的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#實現(xiàn)貪吃蛇小游戲

    C#實現(xiàn)貪吃蛇小游戲

    這篇文章主要為大家詳細(xì)介紹了C#實現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C#使用Socket進(jìn)行簡單的通訊的示例代碼

    C#使用Socket進(jìn)行簡單的通訊的示例代碼

    Socket 類是基于與 Linux、macOS 或 Windows 的本機(jī)互操作性提供的托管代碼版本的套接字服務(wù),提供了一系列的接口來支持應(yīng)用層的調(diào)用,下面我們就來學(xué)習(xí)一下如何使用Socket進(jìn)行簡單的通訊,需要的可以參考下
    2023-12-12
  • 如何使用C#串口通訊實現(xiàn)數(shù)據(jù)的發(fā)送和接收

    如何使用C#串口通訊實現(xiàn)數(shù)據(jù)的發(fā)送和接收

    本文詳細(xì)介紹了如何使用C#實現(xiàn)基于串口通訊的數(shù)據(jù)發(fā)送和接收,通過SerialPort類,我們可以輕松實現(xiàn)串口通訊,并結(jié)合事件機(jī)制實現(xiàn)數(shù)據(jù)的傳遞和處理,感興趣的朋友一起看看吧
    2025-03-03
  • C#實現(xiàn)簡單俄羅斯方塊

    C#實現(xiàn)簡單俄羅斯方塊

    這篇文章主要為大家詳細(xì)介紹了C#實現(xiàn)簡單俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C#?System.Linq提供類似SQL語法的高效查詢操作

    C#?System.Linq提供類似SQL語法的高效查詢操作

    System.Linq是C#的一個命名空間,提供了LINQ(語言集成查詢)功能,允許開發(fā)者使用一致的查詢語法來處理不同類型的數(shù)據(jù)源,如數(shù)組、集合、數(shù)據(jù)庫和XML等,本文介紹C#?System.Linq提供類似SQL語法的高效查詢操作,感興趣的朋友一起看看吧
    2024-09-09

最新評論

财经| 子长县| 安新县| 汾西县| 黄龙县| 辽宁省| 遵化市| 绩溪县| 双柏县| 龙江县| 集安市| 明溪县| 上林县| 武功县| 花莲市| 台东市| 营山县| 广水市| 星子县| 高安市| 桦南县| 通州市| 台东市| 大埔县| 广元市| 大名县| 廉江市| 东乡县| 西充县| 无极县| 阳东县| 安吉县| 建水县| 菏泽市| 皋兰县| 晋江市| 吉木萨尔县| 上饶县| 钟山县| 阿巴嘎旗| 碌曲县|