C#裡Delegates的用法
Delegates在C#裡叫作委派
類似參數,但他傳遞的不是參數,而是功能方法
如 :
委派具有其安全性,可以達成類似封裝的效果。
同時委派還具有可累加的功能特性。
在這邊要是要移掉目前的任一個
類似參數,但他傳遞的不是參數,而是功能方法
如 :
public class DelegateScript : MonoBehaviour
{
delegate void MyDelegate(int num); //使用delegate 需要用delegate 作為開頭,並告知他要傳遞哪種類型的參數。
MyDelegate myDelegate; //之後宣告一個delegate
void PrintNum(int num) //方法1 : 列印參數
{
print ("Print Num: " + num);
}
void DoubleNum(int num) //方法2 : 列印參數X2
{
print ("Double Num: " + num * 2);
}
void Start ()
{
myDelegate = PrintNum; //當委派myDelegate 為方法1時,他就是方法1
myDelegate(50); //輸入與方法1相同的參數就會輸出方法1的結果(50)
myDelegate = DoubleNum; //當委派myDelegate 為方法2時,他就是方法2
myDelegate(50); //輸入與方法2相同的參數就會輸出方法2的結果(100)
} }委派具有其安全性,可以達成類似封裝的效果。
同時委派還具有可累加的功能特性。
public class MulticastScript : MonoBehaviour
{
delegate void MultiDelegate(); //使用delegate 需要用delegate 作為開頭,並告知他要傳遞哪種類型的參數。
MultiDelegate myMultiDelegate; //之後宣告一個delegate
void Start ()
{
myMultiDelegate += PowerUp; //delegate 加入第一個方法 PowerUp
myMultiDelegate += TurnRed; //delegate 加入第二個方法 TurnRed
if(myMultiDelegate != null) //防呆機制,當delegate 不是空方法時
{
myMultiDelegate(); //執行delegate ,在這個例子,他會同時執行 PowerUp() +TurnRed()
}
}
void PowerUp()
{
print ("Orb is powering up!");
}
void TurnRed()
{
renderer.material.color = Color.red;
}
}在這邊要是要移掉目前的任一個
delegate 方法只需要 myMultiDelegate -= PowerUp 或myMultiDelegate += TurnRed;
即可但要小心當 myMultiDelegate 為空時,再減掉方法則會報錯。
留言
張貼留言