方法重寫是C#程式設計中常用的函數操作,需要利用衍生類別來重寫基底類別中定義的操作。為了成功重寫,該方法應為靜態方法,基類和派生方法中的成員分類和存取修飾符應具有相同的類型,並且重寫只能應用於派生類,而不能應用於基類。方法重寫的其他名稱是運行時多態性、動態多態性和後期綁定。
假設,我們的應用程式需要更改衍生類別中基類方法的行為,那麼我們應該進行方法重寫。為此,我們需要在衍生類別中建立與基底類別中具有相同簽名的方法來執行不同的任務。 在我們學習如何使用覆蓋技術之前,我們需要記住以下幾點。
被覆寫聲明覆寫的方法稱為覆蓋基底方法。這將出現在基類中。重寫的基底方法可以是抽象的、重寫的或虛擬的。呼叫新的實現,重寫方法繼承自該基底類別。
我們使用不同的關鍵字來進行方法重寫。他們是,
我們編譯器在程式中遇到 virtual 關鍵字,它知道該方法可以被其任何衍生類別覆寫。結構如下。
public virtual int EnemyHealth() { Console.WriteLine("Enemy Health"); }
這存在於衍生類別中。它告訴編譯器該方法正在重寫基類中具有相同名稱和簽章的方法。
public override int EnemyHealth () { Console.WriteLine("Enemy 1"); }
範例
首先,讓我們來看看不使用 Virtual 和 override 關鍵字的範例。
代碼:
class Birds { public void Color( ) { Console.WriteLine("Birds will have different Colors"); } } class Parrot:Birds { public void Color( ) { Console.WriteLine("Parrot is Green"); } } class ExecutionClass { public static void Main( ) { Birds object; object = new Birds( ); object .Color( ); object = new Parrot( ); object.Color( ); } }
輸出:
在上面的範例中,我們建立了派生類別 Parrot 的對象,並將其參考儲存在 Birds 類型的引用變數物件中。
在下一個步驟中,我們使用引用變數物件來呼叫函數 Color ()。由於 object 包含對 Parrot 類型的物件的引用,因此我們自然會期望 Parrot 類別的函數 Color () 會被執行。但我們錯了。美麗的程式設計不會允許這種事發生。
令我們驚訝的是,執行的是Birds類別的Color()方法。這是因為函數是根據引用的類型而不是引用變數物件所引用的內容來呼叫的。由於該物件是 Birds 類型的引用,因此無論物件引用誰,都會呼叫 Birds 類別的 Color() 函數。
現在讓我們用 virtual 和 override 重寫相同的程序,這次我們將逐步進行以便更好地理解。
建立一個任意名稱的基底類別。這裡我使用的是 Birds。使用 virtual 關鍵字寫一個方法。這將是我們重寫的方法,我們將在繼承的類別中重寫它。在方法內部編寫一些訊息以在控制台中列印。
class Birds { public virtual void Color( ) { Console.WriteLine("Birds will have different Colors"); } }
現在再建立一個類別 Parrot 這次我們將從先前建立的基底類別(即 Birds)繼承它。為了繼承,我們使用‘:’符號。
鸚鵡類:鳥類
這裡寫一個帶有 override 關鍵字的函數並寫一些訊息。確保衍生類別中的方法名稱和簽章與基底類別中的方法名稱和簽章相符。
public override void Color ( ) { Console.WriteLine("Parrot is Green"); }
我們還需要一個類別來執行檢查重寫的功能。建立一個具有任意名稱的類別。在裡面寫下Main函數。
class ExecutionClass { public static void Main( ) { } }
建立父類別的對象,並使用該類別的對象觸發函數。這將呼叫 Birds 類別中存在的 Color 方法。
Birds object; object = new Birds( ); object .Color( );
現在建立衍生類別的物件並呼叫 Color 方法。這將呼叫 Parrot 類別的 Color 方法。
object = new Parrot( ); object.Color( );
你能猜出我們執行程式時的輸出嗎?如下圖所示。
輸出:
關鍵字 override 和 virtual 允許在任何時間分別呼叫基底類別和衍生類別方法,即使方法名稱和簽章相同。
在這篇文章中我們了解了方法重寫、方法重寫的必要性、重寫原理的實際範例、實作方法、使用 virtual 和 override 關鍵字的必要性以及使用程式碼重寫的範例。我們可以得出結論,重寫是多態性中有用的功能之一,我們可以透過它來更改派生類別中基類方法的行為。
以上是C# 中的方法重寫的詳細內容。更多資訊請關注PHP中文網其他相關文章!