首頁 > 後端開發 > C++ > C# 中的虛擬與新功能:何時重寫或隱藏基類方法?

C# 中的虛擬與新功能:何時重寫或隱藏基類方法?

Barbara Streisand
發布: 2025-01-27 06:33:09
原創
210 人瀏覽過

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

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

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

virtual 重寫

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

new 關鍵字

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

示例

考慮以下代碼:

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

public class Derived : Base
{
    public override bool DoSomething() { return true; }
}</code>
登入後複製

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

<code class="language-csharp">Base a = new Derived();
a.DoSomething(); // 返回 true</code>
登入後複製

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

<code class="language-csharp">public class Derived : Base
{
    public new bool DoSomething() { return true; }
}</code>
登入後複製
<code class="language-csharp">Base a = new Derived();
a.DoSomething(); // 返回 true (Derived 中的新方法)</code>
登入後複製

何時使用 virtual 重寫與 new

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

以上是C# 中的虛擬與新功能:何時重寫或隱藏基類方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板