C#中delegate event是一种写法,有的人喜欢有的人不喜欢,但大体来说
知不知道有这东西存在是某些人评定会不会C#的标准。
在unity中也使用了delegate event这东西,在一些人的网志上表示用event才不会
让程式有“坏味道”(不知道这指啥)
用起来大概是这种感觉:
假设我今天有一段专门处理UI的按钮的class
public class UI : MonoBehaviour
{
public delegate void UI_trigger(string just_a_string);
public static event UI_trigger my_UI_trigger;
public void button(string just_a_string) //按下按钮的时候call这行
{
my_UI_trigger(just_a_string);
}
}
这样我的button这个function就只要里面有my_UI_trigger(_objects);这行就好,至于
哪个程式要来接这段程式就不是这个class要考虑的事,就好像当兵的时候连长在集合场
乱叫,连长本身不care哪个确切的谁要来理自己乱叫,但一定要有兵仔回应就是。
如果有程式要来回应按钮按下去时,大概是这样写
public units : MonoBehaviour
{
void OnEnable()
{
UI.my_UI_trigger += units_trigger(string just_a_string);
}
void units_trigger(string just_a_string) //UI的button被call时跑到这行
{
Print("新兵"+transform.gameObject.name+"接收到"+just_a_string);
}
}
但实际上在写的时候呢,除了UI以外,通常游戏中建立event的物件可能是不特定的多
数,而接收event的物件也是不特定的多数,最后就变成N个event的头配上M个event的尾,
最后还得写code来确认到底是这个event是谁发来的要传给谁,好像有点本末倒置了。写
是可以写但是感觉没像人家说得那么的漂亮。
所以这东西到底实际上要怎么用。