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

原文地址:https://www.cnblogs.com/shawnzxx/p/2841893.html