委托的理解与应用

  (C#)先来说下今天的主角:委托,可以说在我们的应用程序中到处可见,事件处理、线程、lambda表达式等,可以说每天都要面对,所以自己感觉能对委托有一个好的认识能帮助我们在开发过程中更好的理解应用,也能有更多的思路去解决面对的一些问题(不过我是菜一个!)。

  委托,可以说它是在C#中的函数指针引用,不过在这里它是类型安全的,在定义委托时,必需要给出它所代表的方法签名以及相应的返回值类型。我个人理解,它就相当于一个带有口的瓶子,而瓶子内部则是装有一个或多个的事件,而瓶子侧面还有出口,能把事件从瓶子中移除,但如果事件要进入瓶子则必须要与瓶口形状相同才可,这样,它的功能就和委托应该差不多了~~哈哈。当然委托也能够承载多个事件,也就是传说中的多播委托,不过当执行时它是没有执行顺序的,这跟多个事件是一样的,所以在多个方法中不能够有依赖关系,不然。。

  与类的使用方式差不多,要使用委托就必须要先声明一个委托,(因为我这没法弄代码实例,所以就先文字说明了,凑合吧),它可以在任何地方声明,不过因为委托的职责就是要进行方法的传递,所以委托的声明一般都为public的,除非有特殊使用方式。当然,实例化的委托实例也被称为委托,委托是派生自基类System.MulticastDelegate,这个类才继承自System.Delegate。

  在lambda表达式中就应用了委托的一种写法,也就是匿名方法,自己理解中的匿名方法就是把委托的实例化过程缩写,直接用delegate开头来创建方法体的过程,当然,使用匿名方法是为了减少代码量,所以当使用多个方法或者方法体比较长时感觉不太适合应用匿名方法。lambda表达式其实它就是2.0里面的匿名方法,可以看下方法中的参数类型,是一个Funs<...>的委托类型,=>左面是委托类型参数,右面就是指向的方法体,如果愿意,你完全可以尝试使用委托来替换它,让它现原型!哈哈,不过现在的法写确实省了好多,太牛*了。。。

  最近应用委托(事件)多的地方就是WF(初学)中,也学到了很多思想,希望能和大家一块学习,有学习WF和CSLA的朋友可以加好友一块进步,QQ:496195435

posted @ 2010-01-14 00:41  屈鲁奇  阅读(424)  评论(0编辑  收藏  举报