了解 C# 中的重寫和方法隱藏
本文闡明了 C# 中重寫和方法隱藏之間的區別,這是兩種強大但經常令人困惑的繼承機制。 選擇正確的方法對於建立健全且可維護的物件導向應用程式至關重要。
重寫:擴充基類行為
重寫是物件導向程式設計的基石,它允許衍生類別為其基底類別中已定義的方法提供專門的實作。 至關重要的是,方法的簽名(名稱、參數和傳回類型)保持不變。 這可以實現多態性,即根據物件的運行時類型而不是其聲明的類型來執行正確的方法。
方法隱藏:隱藏基類方法
相反,方法隱藏涉及在衍生類別中建立一個與基底類別方法共用相同名稱但具有不同簽章(例如不同的參數類型或傳回類型)的方法。 這有效地屏蔽了衍生類別中的基底類別方法。 無論變數宣告的類型為何,編譯器將始終呼叫派生類別的方法。
重寫和方法隱藏的策略應用
當您需要擴展或細化基類方法的行為同時保留其基本目的時,重寫是首選。 它對於實現多態性和遵守健全的物件導向設計原則至關重要。
方法隱藏雖然不太常見且常常不被鼓勵,但卻找到了利基應用:
說明性範例
讓我們來看看 C# 程式碼範例:
<code class="language-csharp">class BaseClass { public virtual void DisplayNumber() { Console.WriteLine(12); } public virtual void DisplayText() { Console.WriteLine("abc"); } } class DerivedClass : BaseClass { public new void DisplayNumber() { Console.WriteLine(42); } public override void DisplayText() { Console.WriteLine("xyz"); } } BaseClass baseInstance = new BaseClass(); BaseClass derivedInstance = new DerivedClass(); DerivedClass clearlyDerived = new DerivedClass(); baseInstance.DisplayNumber(); // Output: 12 baseInstance.DisplayText(); // Output: abc derivedInstance.DisplayNumber(); // Output: 12 derivedInstance.DisplayText(); // Output: xyz clearlyDerived.DisplayNumber(); // Output: 42 clearlyDerived.DisplayText(); // Output: xyz</code>
觀察到 DisplayNumber()
隱藏在 DerivedClass
中,而 DisplayText()
被覆蓋。 輸出演示了運行時類型如何決定執行哪個方法。
結論:為了清晰起見,優先考慮覆蓋
重寫使衍生類別能夠在不破壞已建立的介面的情況下自訂基底類別功能。 方法隱藏雖然在有限的情況下有用,但應謹慎使用以避免歧義並保持清晰的繼承層次結構。 在大多數情況下,重寫提供了更優雅且可維護的解決方案。
以上是C# 中的重寫與方法隱藏:我什麼時候該使用哪一個?的詳細內容。更多資訊請關注PHP中文網其他相關文章!