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

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

Barbara Streisand
發布: 2025-01-28 14:08:10
原創
512 人瀏覽過

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

深入理解C#中的隱藏和重寫

面向對象編程中,隱藏和重寫是影響代碼行為的關鍵概念。本文將探討C#類繼承體系中兩者間的差異。

假設我們有一個基類"A",包含兩個方法"Foo"和"Bar"。 "Foo"方法聲明為public,而"Bar"方法聲明為public virtual,允許派生類重寫其實現。現在,考慮一個從"A"繼承的派生類"B"。

隱藏

在隱藏中,派生類"B"定義了一個名為"Foo"的方法,其名稱和參數列表與基類方法相同。然而,在這種情況下,類"B"中的方法實現並沒有重寫基類實現。它在類"B"中創建了一個新的獨立方法,從而隱藏了基類方法。

例如,在提供的代碼片段中:

<code class="language-c#">public new int Foo() { return 1;}     //隐藏</code>
登入後複製

類"B"中方法聲明之前的"new"關鍵字表示隱藏,當通過"B"類型的對象訪問時,有效地隱藏了基類"Foo"方法。

重寫

另一方面,重寫發生在派生類聲明一個方法時,該方法與基類中的虛方法或抽象方法具有相同的名稱和簽名。在這種情況下,派生類的實現顯式地替換了基類的實現,並成為派生類實例的默認行為。

在給定的示例中:

<code class="language-c#">public override int Bar() {return 1;} //重写</code>
登入後複製

由於基類"A"中的"Bar"聲明為virtual,"override"關鍵字允許類"B"重寫其實現並提供自己的行為。

影響

當將派生類實例強制轉換為基類引用時,隱藏可能會導致意外行為。在這種情況下,可能會調用基類中的隱藏方法,而不是派生類中的重寫方法,這可能會導致運行時錯誤。

然而,重寫遵循繼承層次結構,並確保派生類的實例繼承並調用在這些類中定義的適當方法實現,從而確保一致且預期的行為。

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

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