• 23
  • 1月

事件(event)
看了这么多天,终于看到.NET中最常用的OOP技术–事件(书上原话)了!

刚开始看书上的解释还是一头雾水,硬着头皮把一节全看下来,又仔细想了想,终于明白事件是干什么的了。

事 件无非就是给对象提供了一个操控别人的方法。在没有事件的时候,如果你想使用对象外的一个方法,必需要事先知道你要调用的方法在什么地方,在定义类的时候 显式地写出对这些方法的调用。但有的时候你想要动态地根据实际情况决定调用哪个方法,这种静态的调用就力不从心了。于是程序员们想出了事件这种机制。

在 类中定义一个使用某个委托(限制被调用方法的签名,即参数的个数及类型)的事件,然后在使用该类的实例时,只要将想要被调用的方法挂到该事件上(新建一个 指向该方法的委托“+”到对象的该事件上),只要这个对象引发(与调用类自身中的普通方法一样)该事件时,所有挂到该事件上的方法都将被执行,并且全部方 法都会统一得到原委托所规定好的参数。

定义及使用事件的具体方法可参见《C#入门经典》p311的例子。
总结如下:
1.在类外定义一个全局委托,如:public delegate void MessageHandler(string message); 而且书上建议该委托不要有返回值。
2.在类中定义事件,这里需要使用event关键字和要使用的委托类型,如:public event MessageHandler MessageArrived;
3.在类中需要时调用该事件,调用与普通方法一样,不过要注意签名一定要与定义时的委托一致,如:MessageArrived(“Hello World!”);
4.类实例化之后对事件的使用。
①在合适的地方定义一个符合委托(在这里是“MessaeHandler”)的方法,如有如下方法(函数):DisplayMessage(string message){…}(在此先不管它是在哪被定义的)
②将一个指向该函数的委托添加到事件中,如:实例.MessageArrived+=new MessageHandler(DisplayMessage);
③可以多次按以上两步为一个事件添加更多的处理方法。
④实例内部的代码会在适当时候调用该事件,此时所有添加到该事件的方法都将被调用执行。

您可以对这篇文章发表一条评论,或者在您自己的网站中引用 (Trackback) 它

发表一条评论

所有标签:.net Ajax Java javascript Linux map MySQL RSS TD-SCDMA Ubuntu vim web Win7 乱码 基础知识 备份 奥运会 希望泉 性能 缓存 编程