C# delegete
就像是把函式包裝過然後傳給別的函式使用。有點像是變數的泛型,因為不確定使用時的什麼類型,所以訂一個通用的類型來用。
Unity Delegate
//delegate 定義
//以下是一個參數為string, 回傳值為int的函式
delegate int Action(string amount);
//宣告成一個物件,以便使用
Action action;
//接受傳入delegate物件
private void UseAction(int money,Action action)
{
int n=action(money);
}
//假設有三個同參數同回傳值的函式//一開始不知道要用哪一個
//就可使用delegate
private int TestA(int num) {}
private int TestB(int num) {}
private int TestC(int num) {}
private void UseA()
{
//TestA指定給action,傳進UseAction
//UseAction接受為派類型為參數
//TestA必須是int為參數,回傳值為int的函式
action=TestA;
//action+=TestA; 也可以這樣用
UseAction(3,action);
}
private void UseB()
{
//TestA指定給action,傳進UseAction
action=TestB;
//action+=TestB; 也可以這樣用
UseAction(3,action);
}
private void UseC()
{
//TestA指定給action,傳進UseAction
action=TestC;
//action+=TestC; 也可以這樣用
UseAction(3,action);
}
可以把A的函式委託給B
或是把B的函式委託給A
多重呼叫delegate
delegate一次註冊多個方法,呼叫時所有註冊的都會一起呼叫using UnityEngine;
using System.Collections;
public class MulticastScript : MonoBehaviour
{
delegate void MultiDelegate();
MultiDelegate myMultiDelegate;
void Start ()
{
myMultiDelegate += PowerUp;
myMultiDelegate += TurnRed;
if(myMultiDelegate != null)
{
myMultiDelegate();
}
}
void PowerUp()
{
print ("Orb is powering up!");
}
void TurnRed()
{
renderer.material.color = Color.red;
}
}
沒有留言:
張貼留言