欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1. 重寫和覆蓋的定義

1.1 重寫(override)的定義

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

override關鍵字的語法如下:

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

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

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

1.2 覆蓋(new)的定義

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

new關鍵字的語法如下:

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ù)調用:

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

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

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

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

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

運行程序,得到的結果如下:

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

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

總結

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

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

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

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

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

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

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

相關文章

  • C# FileSystemWatcher 在監(jiān)控文件夾和文件時的使用方法

    C# FileSystemWatcher 在監(jiān)控文件夾和文件時的使用方法

    這篇文章主要介紹了C# FileSystemWatcher 在監(jiān)控文件夾和文件時的使用方法,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以參考下
    2020-06-06
  • C# 和 Python 的 hash_md5加密方法

    C# 和 Python 的 hash_md5加密方法

    這篇文章主要介紹了C# 和 Python 的 hash_md5加密方法,文章圍繞著C# 和 Python 的 hash_md5加密的相關資料展開文章的詳細呢偶然,需要的朋友可以參考一下,希望對你有所幫助
    2021-11-11
  • C#實現(xiàn)ProperTyGrid自定義屬性的方法

    C#實現(xiàn)ProperTyGrid自定義屬性的方法

    這篇文章主要介紹了C#實現(xiàn)ProperTyGrid自定義屬性的方法,主要通過接口ICustomTypeDescriptor實現(xiàn),需要的朋友可以參考下
    2014-09-09
  • 關于C# TabPage如何隱藏的問題

    關于C# TabPage如何隱藏的問題

    TabPage沒有Visible屬性,所以只能通過設置將其與父控件(tabcontrol)的關聯(lián)性去除就好了,如下面代碼:
    2013-04-04
  • 關于C#生成MongoDB中ObjectId的實現(xiàn)方法

    關于C#生成MongoDB中ObjectId的實現(xiàn)方法

    本篇文章小編為大家介紹,關于C#生成MongoDB中ObjectId的實現(xiàn)方法。需要的朋友參考下
    2013-04-04
  • c#調用c++的DLL的實現(xiàn)方法

    c#調用c++的DLL的實現(xiàn)方法

    本文主要介紹了c#調用c++的DLL的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • C#中的DateTime是值類型還是引用類型

    C#中的DateTime是值類型還是引用類型

    近期遇到了DateTime到底是值類型還是引用類型的疑惑,順勢較深入地了解一下DateTime相關的內容,大家有需要的朋友可以參考下
    2017-04-04
  • C# WORD操作實現(xiàn)代碼

    C# WORD操作實現(xiàn)代碼

    在當前項目開發(fā)過程中,客戶有根據(jù)數(shù)據(jù)庫數(shù)據(jù)生成WORD文檔的需求,在和同事溝通的過程中,找到了兩個解決方案
    2009-04-04
  • C#通過NPOI導入導出數(shù)據(jù)EXCEL

    C#通過NPOI導入導出數(shù)據(jù)EXCEL

    這篇文章主要為大家詳細介紹了C#通過NPOI導入導出數(shù)據(jù)EXCEL,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C#中用管理員身份運行程序代碼實例

    C#中用管理員身份運行程序代碼實例

    這篇文章主要介紹了C#中用管理員身份運行程序代碼實例,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-02-02

最新評論