今天闲着蛋疼,思考了一下委托这个东西,我以前只做过简单的程序,使用委托就用在了3个方面:1.程序在运行过程中决定使用哪个函数执行。2.自定义事件。3.多线程访问控件。请问各位老大,还有在什么情况时会用到委托啊?谢谢啦。

解决方案 »

  1.   

    委托(观察者模式)是为了解决依赖倒置
    多线程不光是访问控件,大多数时候不太容易确定(CPU自动调试)某个函数在某个线程中什么时候被执行,而只需要告诉它执行并反馈结果就行了
      

  2.   

    委托的好处多得是了。
    一、事件,由于委托的多播性,即调用委托时可以同时调用多个方法,这为事件的处理提供了便利,比如,我在A类中定义了事件EV1,并且公开,我只能保确EV1在什么时候发生,但我不能管理到它发生后如何处是,所以,这个事件以委托形式公开,使用A类的其他代码,可以根据实际情况,绑定不同的方法以处理事件。
    二、把方法作为参数传递,这一般可以与回调放在一起。就好比经理派小刘去客户那里处理一些问题,但事先不可能预知将会发生什么事情,经理只好叮嘱小刘一些处理原则,就成了经理“委托”小刘去与客户交涉,他不能确定小刘会如何处理,而只要达到想要的结果——帮客户解决问题即可。这就好比把一个委托作为参数传给某段代码,我不管你绑定的方法中何处理,我只知道当我这段代码执行过程会调用委托。
    举个例子:
    public delegate void CompletedCallBack(int state);
    public void DoSomething(object param, CompletedCallBack cb);
    假设上面的DoSomething方法需要一段时间才能完成,所以主线程不再等待,而希望在这事情完成时作出通知就行了,当DoSomething处理完任务时会调用作为参数传入的cb,我不管你如何响应,反正我告诉你任务处理完成,这个cb可以绑定任意符合条件的方法,这一来,就可以把事务处理与事后控制进了分离。
    三、同上,也是作为参数传递,如Func<X, Y, Z>之类等,可以使代码更灵活。
    四、跨线程回调,和上面一样,不过新版本语言可以用等待关键字代替。