您的位置:首页 > 编程语言 > C#

c#基础知识3:事件

2012-08-22 16:31 344 查看
今天在想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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: