c#基础知识(三)事件
sshong 发表于2013年2月3日 12:45:36 更新于2013年2月3日 12:46:28
今天在想unity的start upate等等这种是怎么实现的时候,发现了unity的sendmessage机制,然后sendmessage机制,又有人说有性能问题,有人在网上用c#自带的event机制重写了这个message机制,类似于flash的event机制。于是去搜索c#自带的event机制,自己写了个小demo来实现eventDispather。


c#的event定义,

首先需要一个delegate,相当于事件的响应,c#自带了一个EventHandler,接受sender这个object,以及事件参数EventArgs(c#自带的事件参数类型)。

你也可以自己写delegate,传自己想传的参数,无需用c#自带的EventHandler和EventArgs。如
public delegate void MyEventHandler(Event evt);

其次需要定义一个event,并将事件与你定义的delegate绑定。如
public event MyEventHandler evtHandlers;

然后就需要加一个触发器,触发这个event。如
public void dispatchEvent(Event evt)
{
   evtHandlers(evt);
}

这样一个事件就定义完整了。调用的时候只用这样,用+ -来添加、删除事件响应。
class MainClass
    {
        public static void Main (string[] args)
        {
            Console.WriteLine ("Hello Event!");
           
            EventDispatcher ed = new EventDispatcher();
            ed.evtHandlers += new MyEventHandler(onEvt);
            //
            Event evt = new Event("fuckName", true, null);
            ed.dispatchEvent(evt);
        }

        private static void onEvt(Event evt)
        {
            Console.WriteLine("事件名称{0}", evt.evtName);
        }
    }

参考:
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
标签:event分类:C#阅读:3679
评论
暂无评论
添加评论
您的大名,限长10汉字,20英文(*)
电子信箱(*)
您的网站
正文,限长500汉字,1000英文(*)
验证码(*) 单击刷新验证码
联系我
博客订阅