Delegate and Event(委托与事件学习小结)

这几天在研究委托与事件,中间陆陆续续的穿插了很多事情,学习也就一直断断续续,昨晚总算把事件也看了。

下面是我的一些个人看法,有不对的地方还请各位批评指正:)

 

 

委托适用场合:当类可能需要某一方法的多个实现时(可参考MSDN);使用事件时;多线程;需要封装静态方法时;需要组合方法时(封装逻辑)。

 

委托使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。在使用时必须先声明,初始化时必须传递一个与其注册时一致的方法名(即参数个数、类型,返回值类型必须一致),否则会出现“方法没有采用“0”个参数的重载”编译错误。

该说明参见http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx

 

【委托是一个定义签名的类型,即方法的返回值类型和参数列表类型。可以使用委托类型来声明一个变量,该变量可以引用与委托签名相同的所有方法。】

在VS05里可以不用初始化即自动匹配和它签名相同的方法。而03里必须严格初始化并进行方法添加。

范例demo[Delegate]

 

Code

 

 

事件适用场合:当多方对同一个委托变量进行操作时;需要响应某种操作并需自行进行处理时;

事件是委托的变量(实例)。事件在委托实例上加了一层保护,保护客户的委托以免被重新设置及委托调用链被清空,只允许对委托调用链进行添加或移除操作。

范例:demo[EventConsole]

 

Code

 

 

还请各位批评指正,相互学习

 

 

委托与事件延伸http://www.codeproject.com/KB/cs/events.aspx

posted @ 2009-02-05 16:03  凌心云  阅读(471)  评论(2编辑  收藏  举报