ETH官方钱包

前往
大廳
主題

Unity C# | virtual & override

瓶裝雪 | 2024-01-26 19:00:02 | 巴幣 4 | 人氣 227

一、前言

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

二、虛擬(virtual)

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

1. 多態(tài)性(Polymorphism)

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

2. 擴展性(Extensibility)

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

3. 存取修飾詞

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

三、覆蓋(override)

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

1. 用法

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

2. 基類

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

四、使用流程

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

1. 在 Unity 中創(chuàng)建空腳本

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

using UnityEngine;

public class VirtualTest : MonoBehaviour
{
    
}

2. 宣告虛擬類型

  隨後,宣告虛擬類型。

using UnityEngine;

public class VirtualTest : MonoBehaviour
{
    protected virtual void virtualMethod() { }
}

3. 創(chuàng)建新的腳本並繼承腳本

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

using UnityEngine;

public class VirtualTest_Child : VirtualTest
{
    
}

4. 覆蓋虛擬類型

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

using UnityEngine;

public class VirtualTest_Child : VirtualTest
{
    protected override void virtualMethod()
    {
        //Do something
    }
}

5. 執(zhí)行基類程式

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

using UnityEngine;

public class VirtualTest_Child : VirtualTest
{
    protected override void virtualMethod()
    {
        base.virtualMethod();
    }
}

五、後記

  最近天氣真的很冷,還要趕專題的進度,總覺得寫文章的時間越來越少了阿。
送禮物贊助創(chuàng)作者 !
0
留言

創(chuàng)作回應(yīng)

相關(guān)創(chuàng)作

更多創(chuàng)作