C# 中的 virtual/override 與 new 關鍵字:何時使用哪個關鍵字進行方法重寫?
在基類中定義方法時,程序員常常面臨是否使用“virtual”或“new”關鍵字的難題。這個決定會顯著影響派生類中方法重寫的行為。
Virtual Override
在基類方法中使用“virtual”關鍵字表示它可以在派生類中被重寫。要重寫該方法,派生類必須使用“override”關鍵字。這確保了重寫的方法按預期工作,維護繼承層次結構和多態性。
當派生類調用重寫的方法時,它將執行重寫版本,即使持有對象的引用變量是基類類型。這稱為後期綁定,並允許動態行為。
New 關鍵字
相反,派生類方法中的“new”關鍵字聲明一個新方法,該方法隱藏具有相同名稱的繼承方法。使用時,新方法在派生類中替換繼承方法,從而破壞多態性。
當派生類調用用“new”聲明的方法時,它將執行該新方法,而不管持有對象的引用變量的類型如何。這被認為是早期綁定,並阻礙多態性。
示例
考慮以下代碼示例:
public class Base
{
public virtual bool DoSomething() { return false; }
}
public class Derived : Base
{
public new bool DoSomething() { return true; }
}
如果您將 Derived 的實例分配給 Base 類型的變量並調用 DoSomething(),則如果使用 virtual/override,結果將為 false,但如果使用 new,則結果為 true。這突出了後期綁定和早期綁定之間的區別。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3