淘宝客 网站选择WORDPRESS,建设网站的费用属于资产吗,三网合一网站建设计划,wordpress创建大型菜单委托属于C#中的新名词#xff0c;它的应用也非常广泛#xff0c;例如事件就是委托最简单而又直接的例子。 那么首先说说什么是委托#xff0c;其实委托在用过C或者C的人看来就是函数指针#xff0c;不过使用C#的大多数人都没有用过这两门语言#xff0c;因此对委托的理解不…委托属于C#中的新名词它的应用也非常广泛例如事件就是委托最简单而又直接的例子。 那么首先说说什么是委托其实委托在用过C或者C的人看来就是函数指针不过使用C#的大多数人都没有用过这两门语言因此对委托的理解不是很深对于委托可以简单的从字面去理解即“委托别人去执行某些操作”也就是说执行一个操作而这个操作过程自身并不知道只是委托过来让你去执行而已。 参看如下这个例子。 public delegate void HelloHandler( string Msg ); private void SayHello( string sMsg ) { MessageBox.Show( sMsg ); } // delegate sample HelloHandler hHello new HelloHandler( SayHello ); hHello( Hello World! ); 例子很明显在执行hHello的时候并不知道具体的过程是什么样的只是去执行而已。 现在要说说委托能做些什么那么先来分析一下事件这也是委托用得最多的地方。一般事件的初始化需要绑定一个事件处理函数那么当事件触发的时候处理函数会被调用也就是说在事件处理函数可以明确的知道此事件是被触发了。例如点击窗体的上的Button它会把Click事件反馈给窗体。很明显委托是处理对象之间的信息交互。除了事件外委托的大多用处都和此类似那么这样使用的好处在于降低对象之间耦合性。 其次委托不同于以前函数指针的地方在于可以绑定多个委托函数例如 public delegate void HelloHandler( string Msg ); private void WriteHello1( string sMsg ) { Debug.WriteLine( WriteHello1: sMsg ); } private void WriteHello2( string sMsg ) { Debug.WriteLine( WriteHello2: sMsg ); } // delegate sample HelloHandler hHello new HelloHandler( WriteHello1 ); hHello new HelloHandler( WriteHello2 ); hHello( Hello World! ); 不过在这种情况下由于绑定到委托上的函数是按照顺序执行的所以有两个潜在的问题。 第一个问题当一个函数执行过程中产生异常导致后面的不能进行执行。就上面的例子而言如果在“WriteHello1”函数中出现异常会导致“WriteHello2”不能被执行。 另一个问题就是委托执行的返回值当绑定多个函数委托执行的返回值是最后一个绑定函数执行后的返回值那么通过这个值去做判断将会是不正确的。 那么对于委托绑定多个函数要注意的是不要把异常扩散出来其次委托类型的返回值为“void”。 如何去使用委托很多人看了书上的例子也知道委托的意义但是无法把它和实际应用进行结合。那么在使用委托的时候首先要明白几个问题等各个问题清楚了委托原型也就自然出来了。 需要分析清楚的问题有如下几点。 问题一传递信息是什么传递的时机是否固定一次传递还是多次传递 问题二用委托是否合适 问题三哪一方是委托的调用端而哪一方是委托的初始端 问题四委托的初始化放在哪里比较合适。 问题一是关键这首先决定是否要使用委托来实现其次如果要使用委托那么需要确定委托函数类型。 对于问题二来说很多人可能就不解了。没错委托是可以降低类型之间的耦合性但是能起到这种作用的并不是只有委托这一种方法。很多情况下用重载构造函数即可以达到这一目的因此想问题的时候不能局限于此。例如很多人都做过弹出一个单独窗体对某一条记录进行修改这里用委托可以实现但是考虑到DataRow属于引用类型而这个窗体脱离了数据记录就失去了意义因此可以重载构造函数在初始化窗体的时候把记录传递给窗体就行了。相对而言后者会更简单直接些。 有了前两个问题的分析不少人在写委托的时候会把顺序写反了因此程序执行的效果并不是设想中的那样这一点要尤为注意。 对于第四个问题来说可以借鉴窗体的控件事件初始化部分代码即委托的初始化采取就近原则不过这不是唯一初始化的地方这样写只是便于防止漏写。 好了对于委托大致说这么多希望对大家有所帮助。 本文来自CSDN博客转载请标明出处http://blog.csdn.net/Knight94/archive/2006/11/15/1385284.aspx转载于:https://www.cnblogs.com/Sue_/articles/1656797.html