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

一文詳解C#中重寫(xiě)(override)及覆蓋(new)的區(qū)別

 更新時(shí)間:2023年03月28日 10:38:56   作者:letmebaby  
這篇文章主要為大家詳細(xì)介紹了C#中重寫(xiě)(override)及覆蓋(new)這兩個(gè)關(guān)鍵詞的區(qū)別,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下

1. 重寫(xiě)和覆蓋的定義

1.1 重寫(xiě)(override)的定義

在C#中,用override關(guān)鍵字來(lái)重寫(xiě)一個(gè)父類(lèi)中的虛方法或抽象方法。override關(guān)鍵字用于指示編譯器,我要用派生類(lèi)中的一個(gè)方法,重寫(xiě)基類(lèi)中的同名方法。通過(guò)重寫(xiě)基類(lèi)中的方法,可以實(shí)現(xiàn)多態(tài)性。有關(guān)重寫(xiě)與虛方法和抽象方法的詳細(xì)示例,可移步C#虛方法和抽象方法示例。

override關(guān)鍵字的語(yǔ)法如下:

public override returnType MethodName(ParameterList)
{
    // 方法實(shí)現(xiàn)
}

其中,public表示訪問(wèn)修飾符;override表示重寫(xiě)虛方法或抽象方法;returnType表示方法的返回類(lèi)型;MethodName表示方法名稱(chēng);ParameterList表示方法的參數(shù)列表。

需要注意的是,重寫(xiě)方法的訪問(wèn)修飾符必須與被重寫(xiě)方法的訪問(wèn)修飾符相同或更為寬松。

1.2 覆蓋(new)的定義

在C#中,用new關(guān)鍵字來(lái)覆蓋一個(gè)父類(lèi)中的成員方法或成員變量。new關(guān)鍵字用于指示編譯器,派生類(lèi)中的一個(gè)方法或變量將隱藏基類(lèi)中的同名方法或變量,從而改變了繼承體系中的原有布局關(guān)系。

new關(guān)鍵字的語(yǔ)法如下:

new returnType MemberName(ParameterList)
{
    // 成員實(shí)現(xiàn)
}

其中,returnType表示成員的返回類(lèi)型;MemberName表示成員的名稱(chēng);ParameterList表示成員的參數(shù)列表。

2. 兩者的區(qū)別及示例

下面是一個(gè)示例:

//父類(lèi)
  public class FatherClass
  {
    public virtual string GetName()
    {
      return "我是父類(lèi)中的虛擬方法";
    }
  }
  //子類(lèi)1
  public class SonClass1 : FatherClass
  {
    public override string GetName()
    {
      return "我是子類(lèi)1中的重寫(xiě)方法";
    }
  }
  //子類(lèi)2
  public class SonClass2 : FatherClass
  {
    public new string GetName()
    {
      return "我是子類(lèi)2中的覆蓋方法";
    }
  }

隨后通過(guò)程序入口函數(shù)調(diào)用:

 public class Program
  {
    public static void Main(string[] args)
    {
      FatherClass fatherClass = new FatherClass();
      Console.Write("直接調(diào)用父類(lèi)中的虛方法:");
      Console.WriteLine(fatherClass.GetName());

      SonClass1 s1 = new SonClass1();
      Console.Write("直接調(diào)用子類(lèi)1中的重寫(xiě)方法:");
      Console.WriteLine(s1.GetName());

      SonClass2 s2 = new SonClass2();
      Console.Write("直接調(diào)用子類(lèi)2中的覆蓋方法:");
      Console.WriteLine(s2.GetName());

      FatherClass f1 = new SonClass1();
      Console.Write("聲明父類(lèi),調(diào)用子類(lèi)1中的重寫(xiě)方法:");
      Console.WriteLine(f1.GetName());

      FatherClass f2 = new SonClass2();
      Console.Write("聲明父類(lèi),調(diào)用子類(lèi)2中的覆蓋方法:");
      Console.WriteLine(f2.GetName());
    }
  }

運(yùn)行程序,得到的結(jié)果如下:

直接調(diào)用父類(lèi)中的虛方法:我是父類(lèi)中的虛擬方法
直接調(diào)用子類(lèi)1中的重寫(xiě)方法:我是子類(lèi)1中的重寫(xiě)方法
直接調(diào)用子類(lèi)2中的覆蓋方法:我是子類(lèi)2中的覆蓋方法

聲明父類(lèi),調(diào)用子類(lèi)1中的重寫(xiě)方法:我是子類(lèi)1中的重寫(xiě)方法
聲明父類(lèi),調(diào)用子類(lèi)2中的覆蓋方法:我是父類(lèi)中的虛擬方法

總結(jié)

1:不管是重寫(xiě)還是覆蓋都不會(huì)影響父類(lèi)自身的功能。

2:當(dāng)用子類(lèi)創(chuàng)建父類(lèi)的時(shí)候,如 FatherClass f1 = new SonClass1(),重寫(xiě)會(huì)改變父類(lèi)的功能,即調(diào)用子類(lèi)的功能;而覆蓋不會(huì),仍然調(diào)用父類(lèi)功能。

3:虛方法、實(shí)方法都可以被覆蓋(new),但是抽象方法,接口 不可以。

4:抽象方法,接口,標(biāo)記為virtual的方法可以被重寫(xiě)(override),實(shí)方法不可以。

5:重寫(xiě)使用的頻率比較高,實(shí)現(xiàn)多態(tài);覆蓋用的頻率比較低,用于對(duì)以前無(wú)法修改的類(lèi)進(jìn)行繼承的時(shí)候。

小拓展:當(dāng)使用new關(guān)鍵字覆蓋一個(gè)成員方法或變量時(shí),隱藏的成員在類(lèi)層次結(jié)構(gòu)中的位置會(huì)改變,它會(huì)在派生類(lèi)中被重新定義,而不是從基類(lèi)中繼承。當(dāng)基類(lèi)對(duì)象引用派生類(lèi)對(duì)象時(shí),派生類(lèi)中隱藏的成員不被基類(lèi)引用所包含,因此它們無(wú)法訪問(wèn)。而在派生類(lèi)中,新定義的成員將起作用,完全與基類(lèi)中的同名成員無(wú)關(guān)。

到此這篇關(guān)于一文詳解C#中重寫(xiě)(override)及覆蓋(new)的區(qū)別的文章就介紹到這了,更多相關(guān)C# 重寫(xiě) 覆蓋內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#面向?qū)ο笾M實(shí)現(xiàn)商城購(gòu)物功能

    C#面向?qū)ο笾M實(shí)現(xiàn)商城購(gòu)物功能

    這篇文章主要為大家詳細(xì)介紹了C#面向?qū)ο笾M實(shí)現(xiàn)商城購(gòu)物功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C# Winform中實(shí)現(xiàn)主窗口打開(kāi)登錄窗口關(guān)閉的方法

    C# Winform中實(shí)現(xiàn)主窗口打開(kāi)登錄窗口關(guān)閉的方法

    這篇文章主要介紹了C# Winform中實(shí)現(xiàn)主窗口打開(kāi)登錄窗口關(guān)閉的方法,這在需要用戶(hù)名密碼的軟件項(xiàng)目中是必用的一個(gè)技巧,要的朋友可以參考下
    2014-08-08
  • c#之OpenFileDialog解讀(打開(kāi)文件對(duì)話框)

    c#之OpenFileDialog解讀(打開(kāi)文件對(duì)話框)

    這篇文章主要介紹了c#之OpenFileDialog(打開(kāi)文件對(duì)話框),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Unity實(shí)現(xiàn)滑動(dòng)更換界面效果

    Unity實(shí)現(xiàn)滑動(dòng)更換界面效果

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)滑動(dòng)更換界面效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C#中async和await的深入分析

    C#中async和await的深入分析

    Async/Await是C# 5引入的關(guān)鍵字,用以提高用戶(hù)界面響應(yīng)能力和對(duì)Web資源的訪問(wèn)能力,同時(shí)它使異步代碼的編寫(xiě)變得更加容易,下面這篇文章主要給大家介紹了關(guān)于C#中async和await的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • c#生成站點(diǎn)地圖(SiteMapPath)文件示例程序

    c#生成站點(diǎn)地圖(SiteMapPath)文件示例程序

    這篇文章主要介紹了c#生成站點(diǎn)地圖(SiteMapPath)文件的示例,大家參考使用
    2013-11-11
  • c#中設(shè)置快捷鍵

    c#中設(shè)置快捷鍵

    c#中設(shè)置快捷鍵...
    2007-03-03
  • C#對(duì)Excel表csv文件的讀寫(xiě)操作詳解

    C#對(duì)Excel表csv文件的讀寫(xiě)操作詳解

    在C#編程中,CSV(Comma Separated Values)文件是一種常見(jiàn)的數(shù)據(jù)存儲(chǔ)格式,用于存儲(chǔ)表格數(shù)據(jù),如數(shù)據(jù)庫(kù)導(dǎo)出或報(bào)表,CSV文件以其簡(jiǎn)單、易于處理和跨平臺(tái)兼容性而受到廣泛使用,本篇文章將深入探討如何在C#中進(jìn)行CSV文件的讀寫(xiě)操作,需要的朋友可以參考下
    2024-12-12
  • c#生成自定義圖片方法代碼實(shí)例

    c#生成自定義圖片方法代碼實(shí)例

    在本篇文章中我們給大家分享了關(guān)于c#生成自定義圖片方法的相關(guān)內(nèi)容,有需要的朋友們可以參考下。
    2018-10-10
  • C# 實(shí)現(xiàn)Distinct將對(duì)象按條件去重

    C# 實(shí)現(xiàn)Distinct將對(duì)象按條件去重

    這篇文章主要介紹了C# 實(shí)現(xiàn)Distinct將對(duì)象按條件去重,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12

最新評(píng)論

湛江市| 钟祥市| 汉中市| 新绛县| 民勤县| 土默特左旗| 苍溪县| 龙岩市| 天等县| 钦州市| 兰州市| 镇雄县| 温泉县| 正宁县| 德江县| 随州市| 阿尔山市| 青龙| 济宁市| 湘潭市| 临漳县| 安龙县| 台中县| 庆云县| 聂荣县| 南涧| 宣城市| 定襄县| 宣汉县| 辽宁省| 朝阳县| 即墨市| 剑阁县| 名山县| 黄大仙区| 冷水江市| 武清区| 临邑县| 清新县| 郎溪县| 山西省|