Delegate&Event
Event:(Unity3d中的event是用来取代SendMessage机制的)
c#的event定义,
1:首先需要一个delegate,相当于事件的响应,c#自带了一个EventHandler,接受sender这个object,以及事件参数EventArgs(c#自带的事件参数类型)。
你也可以自己写delegate,传自己想传的参数,无需用c#自带的EventHandler和EventArgs。
1 public delegate void MyEventHandler(Event evt);
2:其次需要定义一个event,并将事件与你定义的delegate绑定。
1 public event MyEventHandler myEvtHandlers;
3:然后就需要加一个方法(触发器)来触发这个event。
1 public void dispatchEvent(Event evt) 2 { 3 myEvtHandlers(evt); 4 }
4:这样一个事件就定义完整了。调用的时候只用这样,用+ -来添加、删除事件响应。
1 class MainClass 2 { 3 public static void Main (string[] args) 4 { 5 Console.WriteLine ("Hello Event!"); 6 7 EventDispatcher ed = new EventDispatcher(); //前三步都是在EventDispatcher类中定义的,注册Event方法在不同类中实现 8 ed.myEvtHandlers += new MyEventHandler(onEvt); 10 Event evt = new Event("fuckName", true, null); 11 ed.dispatchEvent(evt); 12 } 13 14 private static void onEvt(Event evt) 15 { 16 Console.WriteLine("事件名称{0}", evt.evtName); 17 } 18 }
参考:
1、http://www.everyday3d.com/blog/index.php/2010/10/04/c-events-and-unity3d/
2、http://msdn.microsoft.com/en-us/library/aa645739%28VS.71%29.aspx
3、http://forum.unity3d.com/threads/38094-Is-SendMessage-really-that-bad?p=245970#post245970