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

C#中虛方法virtual示例詳解

 更新時(shí)間:2025年03月31日 11:13:37   作者:木偶  
這篇文章主要介紹了C#中虛方法virtual的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

前言;在前面的博客重寫中提到了虛方法和抽象類,本博文詳細(xì)介紹下虛方法:

一.虛方法的定義:

當(dāng)有一個(gè)定義在類中的函數(shù)需要在繼承類中實(shí)現(xiàn)時(shí),可以使用虛方法,虛方法是使用關(guān)鍵字virtual聲明的,虛方法可以在不同的繼承類中有不同的實(shí)現(xiàn),即為基類中定義的允許在派生類中重寫的方法;

二.虛方法的聲明:

一般的聲明形式如下:

訪問(wèn)修飾符 virtual 函數(shù)返回類型 函數(shù)名(參數(shù)表) {函數(shù)體};

舉例:

 class Person
    {
        public virtual void XXX()
        {
            Console.WriteLine("我有一個(gè)夢(mèng)想,那就是動(dòng)身去往遠(yuǎn)方!!");
        }
    }

三.虛方法的調(diào)用:

調(diào)用上,使用子類構(gòu)造的對(duì)象調(diào)用虛方法,就會(huì)調(diào)用子類的方法,使用父類構(gòu)造的對(duì)象,就會(huì)調(diào)用父類的方法;(在規(guī)則 4 中有舉例說(shuō)明)
1.在基類中聲明的虛方法一般在派生類中對(duì)其進(jìn)行調(diào)用,會(huì)運(yùn)用到base關(guān)鍵字:
當(dāng)輸入訪問(wèn)修飾符和override后,系統(tǒng)會(huì)自己彈出我們剛才編寫的虛方法,直接進(jìn)行選擇即可:

2.在運(yùn)行時(shí)進(jìn)行調(diào)用:

四.虛方法的規(guī)則:

1. 虛擬類其實(shí)指的是正常類中的虛擬方法,所以虛擬類可以直接使用實(shí)例,這是與抽象類不同的一點(diǎn);
它不會(huì)像抽象類一樣進(jìn)行報(bào)錯(cuò)!!!

2. 虛擬方法是在方法前加virtual關(guān)鍵字,對(duì)方法進(jìn)行聲明,說(shuō)明這個(gè)方法為虛方法;

 class Person
    {
        public virtual void XXX()//虛方法
        {
            Console.WriteLine("我有一個(gè)夢(mèng)想,那就是動(dòng)身去往遠(yuǎn)方!!");
        }
    }
     class Boy : Person//繼承person
    {
        public override void XXX()//虛方法調(diào)用
        {
            base.XXX();
        }
    }

3. 虛擬函數(shù)和正常函數(shù)無(wú)區(qū)別;
4. 子類繼承虛擬類可以實(shí)現(xiàn)虛擬方法也可以不實(shí)現(xiàn)虛擬方法;
如下代碼所示,在調(diào)用虛方法時(shí),對(duì)虛方法進(jìn)行了重寫,這樣代碼執(zhí)行下來(lái)的就是子類的方法而不是父類的虛方法:::

 class Person
    {
        public virtual void XXX()
        {
            Console.WriteLine("我有一個(gè)夢(mèng)想,那就是動(dòng)身去往遠(yuǎn)方!!");
        }
     }
     class Boy : Person
    {
        public override void XXX()
        {
            Console.WriteLine("我不想繼承父類的虛方法");
        }
         public void SSS()
        {
            Console.WriteLine("不學(xué)習(xí)就不會(huì)進(jìn)步,不僅不就沒(méi)有出人頭地的機(jī)會(huì)");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Person person = new Person();//實(shí)例化的虛方法類
            Boy boy = new Boy();//實(shí)例化的子類
            boy.XXX();//調(diào)用了子類的方法
            boy.SSS();
            Console.ReadLine();
        }
    }

結(jié)果如圖所示:

但是如果我們采用base關(guān)鍵字進(jìn)行調(diào)用的話就會(huì)有以下的結(jié)果:

 public override void XXX()
        {
            base.XXX();
           // Console.WriteLine("我不想繼承父類的虛方法");
        }

結(jié)果如下:它調(diào)用了父類/基類的虛方法

5. 虛方法可以在不同的繼承類中有不同的實(shí)現(xiàn);
我們?cè)谝陨习咐欣^續(xù)進(jìn)行添加調(diào)用虛方法:

 class DD : Person 
    {
        public override void XXX()
        {
            base.XXX();
            Console.WriteLine("我是第一個(gè)繼承虛方法的");
        }
    }
    class SS : Person
    {
        public override void XXX()
        {
            base.XXX();
            Console.WriteLine("我是第二個(gè)繼承虛方法的");
        }
    }

當(dāng)然別忘記實(shí)例化哦,我在這兒就不寫實(shí)例化的代碼了,但是千萬(wàn)不能忘記哦!!??
運(yùn)行結(jié)果:

五.虛方法注意事項(xiàng):

  • 一定要注意,只有為虛方法時(shí)可以進(jìn)行重寫,不能對(duì)非虛方法進(jìn)行重寫;

  • 虛方法在形式上在方法名前加virtual修飾;
  • 虛方法一般在基類定義,在派生類中實(shí)現(xiàn)具體操作,派生類實(shí)現(xiàn)該方法時(shí),要用override對(duì)其方法進(jìn)行修飾;
  • 當(dāng)用virtual修飾后,不允許再有 staticabstract 或者 override 修飾符;

六.虛方法的好處:

當(dāng)在基類中進(jìn)行虛方法的定義以后,在派生類中可以對(duì)其方法進(jìn)行調(diào)用,而且可以通過(guò)重寫來(lái)改變其中實(shí)現(xiàn)的功能來(lái)實(shí)現(xiàn)自己的一些功能,而不是虛方法時(shí),必須重新聲明方法然后再進(jìn)行自己想要的功能進(jìn)行編寫然后再進(jìn)行調(diào)用,但是虛方法只需要在派生類中對(duì)其進(jìn)行調(diào)用,如果想實(shí)現(xiàn)其他的功能可以對(duì)其進(jìn)行方法等的重寫,進(jìn)而實(shí)現(xiàn)自己想要的功能,調(diào)用基類的虛方法來(lái)執(zhí)行派生類的具體操作。而在基類調(diào)用時(shí),并不需要知道派生類是怎么樣實(shí)現(xiàn)的。因?yàn)椴煌呐缮惪赡軐?shí)現(xiàn)的方式不一樣。但調(diào)用的方式是一樣的,實(shí)現(xiàn)了不同的功能

七.虛方法的作用:

1.允許 子類 / 派生類 進(jìn)行重寫;
2.增加代碼的可維護(hù)性,脈絡(luò)較清淅有條理;

到此這篇關(guān)于C#中虛方法virtual詳解的文章就介紹到這了,更多相關(guān)C# 虛方法virtual內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在C#中List集合使用First()方法獲取第一個(gè)元素的操作

    在C#中List集合使用First()方法獲取第一個(gè)元素的操作

    這篇文章主要介紹了在C#中List集合使用First()方法獲取第一個(gè)元素的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • C#從XmlDocument提取完整字符串的方法

    C#從XmlDocument提取完整字符串的方法

    文章介紹了兩種生成格式化XML字符串的方法,方法一使用`XmlDocument`的`OuterXml`屬性,但輸出的XML字符串不帶格式,可讀性差,方法二利用`XmlWriterSettings`控制格式,并通過(guò)`MemoryStream`作為輸出流,可以自定義編碼,如UTF-8,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • C#無(wú)損轉(zhuǎn)換Image為Icon的方法

    C#無(wú)損轉(zhuǎn)換Image為Icon的方法

    這篇文章主要為大家詳細(xì)介紹了C#無(wú)損轉(zhuǎn)換Image為Icon的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • c#連接mysql數(shù)據(jù)庫(kù)的方法

    c#連接mysql數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了c#連接mysql數(shù)據(jù)庫(kù)的方法,需要的朋友可以參考下
    2014-04-04
  • 使用C#操作ftp服務(wù)器的示例代碼

    使用C#操作ftp服務(wù)器的示例代碼

    這篇文章主要為大家詳細(xì)介紹了使用C#操作ftp服務(wù)器的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下
    2024-02-02
  • C#串口通信模塊使用方法示例

    C#串口通信模塊使用方法示例

    這篇文章主要介紹了C#串口通信模塊使用方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • DOTNETBAR制作圓角窗體和圓角控件代碼實(shí)例

    DOTNETBAR制作圓角窗體和圓角控件代碼實(shí)例

    這篇文章主要介紹了DOTNETBAR制作圓角窗體和圓角控件的方法,大家參考使用吧
    2013-11-11
  • C#實(shí)現(xiàn)拼手氣紅包算法

    C#實(shí)現(xiàn)拼手氣紅包算法

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)拼手氣紅包算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • C#在LINQ中使用GroupBy

    C#在LINQ中使用GroupBy

    這篇文章主要介紹了C#在LINQ中如何使用GroupBy,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-08-08
  • 基于C#實(shí)現(xiàn)視頻文件解封裝與媒體流讀取方案

    基于C#實(shí)現(xiàn)視頻文件解封裝與媒體流讀取方案

    本文詳細(xì)介紹了基于C#實(shí)現(xiàn)視頻文件解封裝與媒體流讀取的兩種方案:FFmpeg.AutoGen和FFmpeg.NET,對(duì)比了兩種庫(kù)的優(yōu)缺點(diǎn),并分別提供了實(shí)現(xiàn)方案,包括環(huán)境配置、核心代碼和高級(jí)功能,還討論了解封裝流程、媒體流讀取方法、性能優(yōu)化和調(diào)試技巧,需要的朋友可以參考下
    2026-02-02

最新評(píng)論

公安县| 中西区| 石楼县| 抚州市| 阿图什市| 封丘县| 秦皇岛市| 琼结县| 剑阁县| 黄梅县| 博客| 焦作市| 札达县| 上饶市| 江都市| 龙川县| 韩城市| 油尖旺区| 丽水市| 昆山市| 稷山县| 祁连县| 孟津县| 海丰县| 潮州市| 崇明县| 朔州市| 靖西县| 手机| 微山县| 历史| 鄯善县| 嘉荫县| 安西县| 永靖县| 阳谷县| 乐昌市| 宜宾市| 新兴县| 阿拉善右旗| 株洲市|