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 為空時,再減掉
方法
則會報錯。
留言
張貼留言