问个关于委托的问题。
今天闲着蛋疼,思考了一下委托这个东西,我以前只做过简单的程序,使用委托就用在了3个方面:1.程序在运行过程中决定使用哪个函数执行。2.自定义事件。3.多线程访问控件。请问各位老大,还有在什么情况时会用到委托啊?谢谢啦。
------解决方案--------------------委托的好处多得是了。
一、事件,由于委托的多播性,即调用委托时可以同时调用多个方法,这为事件的处理提供了便利,比如,我在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>之类等,可以使代码更灵活。
四、跨线程回调,和上面一样,不过新版本语言可以用等待关键字代替。