Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)delvpublished in(发表于) 2014/1/24 9:10:30 《Effective,C#》:用委托实现回调_[Asp.Net教程]
不过在这种情况下,由于绑定到委托上的函数是按照顺序执行的,所以有两个潜在的问题。 第一个问题,当一个函数执行过程中产生异常,导致后面的不能进行执行。就上面的例子而言,如果在“WriteHello1”函数中出现异常,会导致“WriteHello2”不能被执行。 另一个问题,就是委托执行的返回值,当绑定多个函数,委托执行的返回值是最后一个绑定函数执行后的返回值,那么通过这个值去做判断将会是不正确的。 那么对于委托绑定多个函数,要注意的是不要把异常扩散出来,其次委托类型的返回值为“void”。 如何去使用委托,很多人看了书上的例子,也知道委托的意义,但是无法把它和实际应用进行结合。那么在使用委托的时候,首先要明白几个问题,等各个问题清楚了,委托原型也就自然出来了。 需要分析清楚的问题有如下几点。 问题一,传递信息是什么,传递的时机是否固定,一次传递还是多次传递; 问题二,用委托是否合适; 问题三,哪一方是委托的调用端,而哪一方是委托的初始端; 问题四,委托的初始化放在哪里比较合适。 问题一是关键,这首先决定是否要使用委托来实现,其次如果要使用委托,那么需要确定委托函数类型。 对于问题二来说,很多人可能就不解了。没错,委托是可以降低类型之间的耦合性,但是能起到这种作用的并不是只有委托这一种方法。很多情况下,用重载构造函数即可以达到这一目的,因此想问题的时候,不能局限于此。例如,很多人都做过弹出一个单独窗体对某一条记录进行修改,这里用委托可以实现,但是考虑到DataRow属于引用类型,而这个窗体脱离了数据记录就失去了意义,因此可以重载构造函数,在初始化窗体的时候,把记录传递给窗体就行了。相对而言,后者会更简单直接些。 有了前两个问题的分析,不少人在写委托的时候,会把顺序写反了,因此程序执行的效果并不是设想中的那样,这一点要尤为注意。 对于第四个问题来说,可以借鉴窗体的控件事件初始化部分代码,即委托的初始化采取就近原则,不过这不是唯一初始化的地方,这样写只是便于防止漏写。 好了,对于委托大致说这么多,希望对大家有所帮助。
出处:天极Yesky 作者:愚翁
赞