」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 虛擬與C#中的新事物:何時覆蓋或隱藏基類方法?

虛擬與C#中的新事物:何時覆蓋或隱藏基類方法?

發佈於2025-01-29
瀏覽:839

Virtual vs. New in C#: When to Override or Hide Base Class Methods?

C# 中 virtual 和 new 關鍵字的用法

面向對象編程中,通常在基類中定義方法,並在派生類中重寫或重新定義這些方法。雖然 "virtual" 和 "new" 關鍵字都可以用來修改方法聲明,但它們有不同的實現方式。

virtual 重寫

  • 在基類中將方法聲明為 "virtual",表示子類可以重寫它。
  • 允許派生類提供不同的方法實現,而不會破壞繼承鏈。

new 關鍵字

  • 在派生類中聲明一個與基類中方法同名的新方法。
  • 隱藏基類方法,並在派生類中創建一個新的實現。
  • 破壞繼承鏈,這意味著派生類方法與基類方法無關。

示例

考慮以下代碼:

public class Base
{
    public virtual bool DoSomething() { return false; }
}

public class Derived : Base
{
    public override bool DoSomething() { return true; }
}

如果我們創建一個 Derived 的實例並將其存儲在 Base 類型的變量中,對 DoSomething() 的調用將調用 Derived 中重寫的方法:

Base a = new Derived();
a.DoSomething(); // 返回 true

相反,如果我們在 Derived 中使用 new 關鍵字,對 DoSomething() 的調用將調用 Derived 中的新方法,即使變量是 Base 類型:

public class Derived : Base
{
    public new bool DoSomething() { return true; }
}
Base a = new Derived();
a.DoSomething(); // 返回 true (Derived 中的新方法)

何時使用 virtual 重寫與 new

  • 使用 virtual 重寫來繼承和擴展行為,同時保持繼承鏈。
  • 使用 new 來創建一個新的、獨立的實現,從而破壞繼承鏈。
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3