在物件導向程式設計中,方法重寫允許衍生類別提供其自身對從基底類別繼承的方法的實作。 C# 提供兩種截然不同的方法重寫方式:「virtual」 和 “override” 關鍵字,或簡單地聲明一個具有相同簽名的新的方法。
當方法在基底類別中宣告為 “virtual” 時,它可以使用 “override” 關鍵字在衍生類別中被重寫。這種方法允許衍生類別提供其自身的實現,同時保持原始方法簽章。在運行時,當物件是派生類型時,即使持有物件的引用變數是基底類型,也會呼叫重寫的方法。
或者,可以透過宣告一個具有相同簽章並將其標記為 “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” 和 “new” 方法重寫的主要區別在於:
以上是C# 方法重寫:虛擬/重寫與新方法 – 有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!