首頁 > 後端開發 > C++ > C#中的方法陰影和覆蓋有什麼區別?

C#中的方法陰影和覆蓋有什麼區別?

Patricia Arquette
發布: 2025-01-28 14:05:09
原創
227 人瀏覽過

What's the Difference Between Method Shadowing and Overriding in C#?

C# 方法隱藏與重寫:詳解

在C#中,派生類可以通過兩種不同的方式操作基類方法:方法隱藏和方法重寫。理解這兩種概念的區別對於有效的代碼維護和繼承實現至關重要。

方法隱藏

當一個類聲明一個與基類中方法同名的新方法,但沒有顯式聲明為重寫方法時,就會發生方法隱藏。新聲明的方法有效地隱藏了基類的實現,並提供了它自己的獨立實現。

示例:

<code class="language-csharp">class A {
   public int Foo(){ return 5;}
}
class B : A{
   public new int Foo() { return 1;} //隐藏
}</code>
登入後複製

當B類的實例clB調用clB.Foo()時,它執行B類中定義的實現,輸出“1”。但是,當我們將clB強制轉換為A類時,調用者訪問Foo()的基類實現,輸出“5”。

方法重寫

與隱藏不同,方法重寫顯式地用派生類中的新實現替換基類方法的實現。這是通過使用override關鍵字實現的。

示例:

<code class="language-csharp">class A {
   public virtual int Bar(){return 5;}
}
class B : A{
   public override int Bar() {return 1;} //重写
}</code>
登入後複製

當B類的實例clB調用clB.Bar()時,它執行B類中的重寫實現,輸出“1”。將clB強制轉換為A類不會影響行為,因為始終調用重寫實現。

主要區別

  • 隱藏隱藏了基類方法: 隱藏在派生類中創建了一個新方法,該方法隱藏了基類的實現。重寫替換了基類的實現。
  • 重寫需要關鍵字: 重寫需要使用override關鍵字來顯式指示預期的替換。
  • 隱藏破壞繼承: 通過隱藏基類的實現,隱藏可能會破壞繼承鏈。重寫保持繼承關係。
  • 隱藏方法不是多態的: 隱藏的方法不受多態機制(如動態綁定)的影響。重寫的方法表現出多態行為,根據實際對像類型做出不同的響應。

以上是C#中的方法陰影和覆蓋有什麼區別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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