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; } }
沒有留言:
張貼留言