2024-01-26|閱讀時間 ‧ 約 26 分鐘

Unity C# | virtual & override

一、前言

  這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。


二、虛擬(virtual)

  虛擬具有多態性(Polymorphism)與擴展性(Extensibility),能讓程式根據實際運用產生不同效果,並方便程式員擴展程式碼而不用訪問基類。


1. 多態性(Polymorphism)

  當基類中的方法被標記為 virtual 時,它可以在派生類別中被覆寫(override)。當A腳本繼承B的內容時,稱B為基類、A為派生類別。這使得相同的函式,根據實際對象的類型而執行不同的實現,這稱之為多態性。


2. 擴展性(Extensibility)

  因為覆寫的存在,可以在不觸碰基類的情況下,擴增或修改基類的函式與變數,這種在不修改現有程式碼的情況下增加功能,稱為擴展性。


3. 存取修飾詞

  談到繼承與覆寫,就可以了解一個新的存取修飾詞"protected"了,該存取修飾詞所修飾的欄位,只有在派生類別才能存取。


三、覆蓋(override)

  基本上覆蓋(override)跟虛擬(virtual)是一起使用的,用於派生類別中覆蓋基類的函式或變數。


1. 用法

  在派生類別中,創建一個與基類一模一樣的函式,在其存取修飾詞後面添加"Override"修飾詞即可。使用 override 以後,就可改寫該函式或變數,可以結合基類的程式,或是完全重寫。


2. 基類

  在派生類別中,如果想執行基類的程式,則可以在覆蓋的函式中打上"Base.Function();"來執行基類的函式,該處的 Function(); 則是這個函式的名稱。


四、使用流程

  在 Unity 中,有一個很常用的繼承,那就是 MonoBehaviour,任何腳本只能繼承一個類別,因此可能會被 Monobehaviour 給困住,只要把含 MonoBehaviour 的腳本當作基類即可。


1. 在 Unity 中創建空腳本

  在 Unity 中創建一個空的腳本,命名為"VirtualTest"並刪除不必要的 Start 與 Update 函式。


using UnityEngine;


public class VirtualTest : MonoBehaviour

{

}


2. 宣告虛擬類型

  隨後,宣告虛擬類型。


using UnityEngine;


public class VirtualTest : MonoBehaviour

{

protected virtual void virtualMethod() { }

}


3. 創建新的腳本並繼承腳本

  創建一個新的腳本"VirtualTest_Child",同樣刪除不必要的函式,這次把 Monobehaviour 換成"VirtualTest"。


using UnityEngine;


public class VirtualTest_Child : VirtualTest

{

}


4. 覆蓋虛擬類型

  創建同樣命名的函式,連同存取關鍵字一起照抄,原本 virtual 的位置改為 override ,這樣就成功了。


using UnityEngine;


public class VirtualTest_Child : VirtualTest

{

protected override void virtualMethod()

{

//Do something

}

}


5. 執行基類程式

  如果希望執行基類程式,則添加"base.virtualMethod();"即可,該行程式碼會執行基類的程式內容。


using UnityEngine;


public class VirtualTest_Child : VirtualTest

{

protected override void virtualMethod()

{

base.virtualMethod();

}

}


五、後記

  最近天氣真的很冷,還要趕專題的進度,總覺得寫文章的時間越來越少了阿。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.