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

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

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

1. 重寫和覆蓋的定義

1.1 重寫(override)的定義

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

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

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

其中,public表示訪問修飾符;override表示重寫虛方法或抽象方法;returnType表示方法的返回類型;MethodName表示方法名稱;ParameterList表示方法的參數(shù)列表。

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

1.2 覆蓋(new)的定義

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

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

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

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

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

下面是一個示例:

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

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

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

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

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

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

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

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

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

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

總結(jié)

1:不管是重寫還是覆蓋都不會影響父類自身的功能。

2:當用子類創(chuàng)建父類的時候,如 FatherClass f1 = new SonClass1(),重寫會改變父類的功能,即調(diào)用子類的功能;而覆蓋不會,仍然調(diào)用父類功能。

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

4:抽象方法,接口,標記為virtual的方法可以被重寫(override),實方法不可以。

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

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

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

相關(guān)文章

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

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

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

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

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

    c#之OpenFileDialog解讀(打開文件對話框)

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

    Unity實現(xiàn)滑動更換界面效果

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

    C#中async和await的深入分析

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

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

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

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

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

    C#對Excel表csv文件的讀寫操作詳解

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

    c#生成自定義圖片方法代碼實例

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

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

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

最新評論

乐陵市| 天门市| 肇源县| 红原县| 东光县| 金湖县| 永福县| 岳阳市| 隆回县| 兴业县| 北海市| 定安县| 西峡县| 福州市| 翁牛特旗| 拜泉县| 黑龙江省| 尉氏县| 正镶白旗| 搜索| 和林格尔县| 平果县| 嘉祥县| 正定县| 丹凤县| 锦屏县| 茌平县| 阳曲县| 贞丰县| 合肥市| 澳门| 敦化市| 左云县| 英德市| 苏尼特右旗| 承德市| 浏阳市| 鲜城| 福建省| 嵊州市| 贵定县|