C# 中的 virtual/override 與 new 關鍵字:何時使用哪個關鍵字進行方法重寫?
在基底類別中定義方法時,程式設計師常常面臨是否使用「virtual」或「new」關鍵字的難題。這個決定會顯著影響衍生類別中方法重寫的行為。
Virtual Override
在基底類別方法中使用「virtual」關鍵字表示它可以在衍生類別中被重寫。要重寫該方法,派生類別必須使用“override”關鍵字。這確保了重寫的方法能如預期運作,維護繼承層次結構和多態性。
當派生類別呼叫重寫的方法時,它將執行重寫版本,即使持有物件的參考變數是基底類別類型。這稱為後期綁定,並允許動態行為。
New 關鍵字
相反,衍生類別方法中的「new」關鍵字聲明一個新方法,該方法隱藏具有相同名稱的繼承方法。使用時,新方法在衍生類別中取代繼承方法,從而破壞多態性。
當派生類別呼叫用「new」宣告的方法時,它將執行該新方法,而不管持有物件的引用變數的類型如何。這被認為是早期綁定,並阻礙多態性。
範例
考慮以下程式碼範例:
<code class="language-csharp">public class Base { public virtual bool DoSomething() { return false; } } public class Derived : Base { public new bool DoSomething() { return true; } }</code>
如果您將 Derived 的實例指派給 Base 類型的變數並呼叫 DoSomething(),則如果使用 virtual/override,結果將為 false,但如果使用 new,則結果為 true。這突顯了後期綁定和早期綁定之間的差異。
以上是虛擬/覆蓋與c#中的新事物:我什麼時候應該使用哪個關鍵字進行方法覆蓋?的詳細內容。更多資訊請關注PHP中文網其他相關文章!