首頁 >後端開發 >C++ >C# 方法重寫:虛擬/重寫與新方法 – 有什麼不同?

C# 方法重寫:虛擬/重寫與新方法 – 有什麼不同?

Barbara Streisand
Barbara Streisand原創
2025-01-27 06:26:09717瀏覽

C# Method Overriding: Virtual/Override vs. New – What's the Difference?

深入理解 C# 中的方法重寫

在物件導向程式設計中,方法重寫允許衍生類別提供其自身對從基底類別繼承的方法的實作。 C# 提供兩種截然不同的方法重寫方式:「virtual」 和 “override” 關鍵字,或簡單地聲明一個具有相同簽名的新的方法。

Virtual Override

當方法在基底類別中宣告為 “virtual” 時,它可以使用 “override” 關鍵字在衍生類別中被重寫。這種方法允許衍生類別提供其自身的實現,同時保持原始方法簽章。在運行時,當物件是派生類型時,即使持有物件的引用變數是基底類型,也會呼叫重寫的方法。

New

或者,可以透過宣告一個具有相同簽章並將其標記為 “new” 的新方法來在衍生類別中重寫方法。這種方法完全替換基類中的實現,並且無論運行時物件的​​類型如何,都會呼叫重寫的方法。

區別範例

為了說明區別,請考慮以下程式碼片段:

<code class="language-csharp">public class Foo
{
    public virtual bool DoSomething() { return false; }
}

public class Bar : Foo
{
    public override bool DoSomething() { return true; }
}</code>

如果我們如下呼叫程式碼:

<code class="language-csharp">Foo a = new Bar();
a.DoSomething();</code>

結果將根據用於重寫的方法而有所不同:

  • Virtual Override: 執行階段將呼叫派生類別 (Bar) 中重寫的方法,即使物件儲存在 Foo 類型的變數中。
  • New: 將呼叫衍生類別 (Bar) 中的新方法,有效地取代基底類別 (Foo) 中的實作。

主要區別

總而言之,「virtual」 “override” 和 “new” 方法重寫的主要區別在於:

  • 呼叫: Virtual override 僅在物件的類型與衍生類別相符時才允許呼叫重寫的方法,而 new 總是呼叫新方法,而不管物件的類型如何。
  • 實作: Virtual override 保持原始方法簽名並允許衍生類別提供替代實現,而 new 替換基底類別中的實作。
  • 用途: Virtual override 更適合多態行為,其中不同的衍生類別提供其自身的實現,而 new 適用於修改或自訂基底類別方法。

以上是C# 方法重寫:虛擬/重寫與新方法 – 有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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