日期:2014-05-17  浏览次数:20742 次

C# 委托的用处
新学C# 看不出使用委托 到底有什么好处么
比如JAVA里实现一个观察者 add  notify这样的套路 也完全能实现方法
为什么要使用委托呢? 他比用代码写的 有什么好处?

------解决方案--------------------
刚开始学委托的时候,建议还是多结合实例代码去自己理解,这个东西语言表达起来比较抽象,结合例子的话,理解起来很快的
------解决方案--------------------
委托完全可以用观察者模式去替代,但是你不觉得用委托会更方便吗?
------解决方案--------------------
据我所知,Java是通过传递接口对象来实现委托效果的,比如按钮点击事件则是传递带有点击函数的接口对象,这是由于Java无法对函数进行封装,Java不支持指针,而函数又不是对象,自然就只能传递接口对象。而C#不同了,C#是支持指针的,对于函数指针封装成委托使用,大大简化了事件代码编写的过程,而且直接访问函数比初始化一个对象后访问函数的效率要高,资源消耗也少。
为了提高编码效率,Java支持匿名类而C#则是支持匿名委托,C#的匿名委托其实有2种处理方式,一种是纯粹的创建委托所需函数,另一种是先创建一个匿名类,包含所需函数。第二种方法和Java的原理是一样的,当需要使用局部变量但又不是通过参数传递进去时,就会用到第二种方式。有时候为了特殊需求,会用到Java的那种构造自定义类的方式来替代直接传递委托,其好处是可以存储自己的变量。

总结:对比优缺点的话,使用JAVA接口对象则可以进行局部变量存储,方便变量值的交互,而使用C#委托的话,变量脱离函数作用域就失效了,如果定义全局变量又要考虑被多处修改的可能性。不过对于很多场合C#委托的直接使用效率高于调用接口对象,同时C#也支持Java的那种接口对象形式,前面提及过了,因此C#在这个方面是强于Java的。