首頁 >後端開發 >C++ >C#繼承中的'新”和'覆蓋”有什麼區別?

C#繼承中的'新”和'覆蓋”有什麼區別?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-28 12:07:08785瀏覽

What's the Difference Between `new` and `override` in C# Inheritance?

c#繼承:理解new>override

> new override在C#繼承中,關鍵字

>和

提供不同的方法來管理派生類中的方法行為。 這種解釋闡明了它們的差異和適當的用法。 new

修飾符:定義單獨的方法

new> 修飾符允許派生類引入與基類中方法相同名稱的方法。 至關重要的是,此

不覆蓋基類方法。相反,它創建了一個完全獨立的方法。

> >示例:

<code class="language-csharp">public class BaseClass {
    public void MyMethod() { Console.WriteLine("BaseClass Method"); }
}

public class DerivedClass : BaseClass {
    public new void MyMethod() { Console.WriteLine("DerivedClass Method"); }
}</code>

DerivedClass.MyMethod()>這裡,MyMethod()是一種獨特的方法。 在ADerivedClass>實例上調用BaseClass>執行派生類的版本;在A

>實例上呼喚它執行基類的版本。

> override>修飾符:替換虛擬方法

override>修飾符用於從基類替換虛擬方法的實現。 基類方法必須將其聲明為(或virtual)。 abstract確保在派生類的實例中調用該方法時稱為派生類的版本。 override

>示例:

在這種情況下,
<code class="language-csharp">public class BaseClass {
    public virtual void MyMethod() { Console.WriteLine("BaseClass Method"); }
}

public class DerivedClass : BaseClass {
    public override void MyMethod() { Console.WriteLine("DerivedClass Method"); }
}</code>
覆蓋

。 在ADerivedClass.MyMethod()>實例BaseClass.MyMethod()上呼叫MyMethod()始終DerivedClass執行版本。 DerivedClass

鍵差總結:

功能 方法創建 創建一個全新的方法 替換現有的虛擬方法 繼承 打破了方法的繼承鏈 維護繼承鏈 基類方法 基類方法不受影響 基類方法必須是虛擬/摘要

何時使用每個修飾符:

>
  • >使用new>當您想要在派生類中完全獨立的方法時,即使它與基類中的方法共享名稱。 這對於避免意想不到的壓倒和維持不同的功能很有用。

    >
  • 當您打算擴展或修改基類中定義的虛擬方法的行為時,

    >使用override>在派生類中提供了專門的實現,同時仍在維護該特定方法的繼承關係。

  • 通過了解這些區別,您可以有效地利用C#應用中的繼承和多態性。

以上是C#繼承中的'新”和'覆蓋”有什麼區別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn