溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中重寫及覆蓋的區(qū)別有哪些

發(fā)布時間:2023-03-28 11:57:49 來源:億速云 閱讀:241 作者:iii 欄目:開發(fā)技術

這篇文章主要介紹了C#中重寫及覆蓋的區(qū)別有哪些的相關知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇C#中重寫及覆蓋的區(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ù)調(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());
    }
  }

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

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

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

關于“C#中重寫及覆蓋的區(qū)別有哪些”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“C#中重寫及覆蓋的區(qū)別有哪些”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI