黑马程序员技术交流社区

标题: 委托的应用 [打印本页]

作者: 刘亚龙    时间: 2012-12-2 13:01
标题: 委托的应用
本帖最后由 刘亚龙 于 2012-12-2 18:44 编辑

通过委托对象可以调用它所引用的方法,但是需要先将方法的引用传给委托,疑问在于既然知道要调用什么方法,为什么不直接调用需要的方法,还要通过委托来调用,感觉有点多此一举。那在实际应用中委托有什么更实际的好处?
作者: ♂张耕明    时间: 2012-12-2 13:35
委托可以将方法当做参数传入另一个方法,怎么会多此一举。
作者: 王继光    时间: 2012-12-2 13:51
最明显的例子是 多线程里面 当你 开启一个线程,需要给线程 一个 方法,让它执行。 那么这个时候 方法就作为参数传递了。  它的实现就是 靠的委托。。
作者: 黑马_黄开潮    时间: 2012-12-2 15:05
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性


作者: 李伟斌    时间: 2012-12-2 18:20
老大,事件就是基于委托的,想想事件有什么好处吧
作者: 刘亚龙    时间: 2012-12-2 18:25
李伟斌 发表于 2012-12-2 18:20
老大,事件就是基于委托的,想想事件有什么好处吧

嗯,你的答案比较靠谱,能具体解释下吗
作者: 李伟斌    时间: 2012-12-2 18:36
当要把方法传给其他方法时, 需要使用委托.

        在 C 和 C++ 中, 只能提取函数的地址, 并传送为一个参数, C 是没有类型安全的, 可以把任何函数传送给需要函数指针的方法.  这种直接的方法会导致一些问题, 例如 类型的安全性, 在进行面向对象编程时,  方法很少是孤立存在的, 在调用前, 通常需要与类实例相关联.  而这种方法没有考虑到这个问题.   
        所以.NET Framework 在语法上不允许使用这种直接的方法.
        如果要传递方法,  就必须把方法的细节封装在一种新类型的对象中,  即委托.
       
        委托只是一种特殊的对象类型, 其特殊之处在于,   我们以前定义的所有对象都包含数据,

        而委托包含的只是方法的地址





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2