C#学习(二)委托

C#学习(二)委托


2007-09-02 20:38:55
 标签: 委托   [ 推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://cancel.blog.51cto.com/133022/40797
       这次写点关于委托的东西,有些网友在学习的时候老是不明白委托是什么,用来干什么。我来写一下自己的关于委托的理解,由于自己的写作水平的限制参考了一下网上其他同仁的文章
      委托的概念,如果用过C或者C++,那么委托可以看作是函数指针。可以从字面去理解,即“委托别人去执行某些操作”,也就是说执行一个操作,而这个操作过程自身并不知道,只是委托过来让你去执行而已。
例子如下:
public delegate void TestHandler( string Msg );
private void Test( string sMsg )
{
 MessageBox.Show( sMsg );
}
TestHandler test= new TestHandler( Test);
test( "Hello World!" );
     例子很明显,在执行test的时候,并不知道具体过程是什么样的,只是去执行而已。
     委托能做什么:先分析一下事件,这是委托用的最多的地方。一般事件的初始化需要绑定一个事件处理函数,那么当事件触发的时候,处理函数会被调用,也就是说在事件处理函数可以明确的知道,此事件是被触发了。例如,点击窗体上的Button,它会把Click事件反馈给窗体。很明显,委托是处理对象之间的信息交互。除了事件外,委托的大多用处都和此类似,那么这样使用的好处在于降低对象之间案的耦合性(耦合性是指模块之间的关联程度,而内聚是指模块内部各部分的聚合程度,很显然模块之间的关联度越小,模块内部的聚合越高越容易维护)。耦合性比较高的话,模块代码不易分离,是不好的编程模式。
     其次委托不同于以前函数指针的地方在于,可以绑定多个委托函数,例如:
public delegate void TestHandler( string Msg );
private void Test1( string sMsg )
{
 Debug.WriteLine( "WriteHello1:" + sMsg );
}
private void Test2( string sMsg )
{
 Debug.WriteLine( "WriteHello2:" + sMsg );
}
TestHandler test= new TestHandler( Test1);
test+= new TestHandler( Test2);
test( "Hello World!" );
    不过在这种情况下,由于绑定到委托上的函数是按照顺序执行的,所以有两个问题:
    1:当一个函数执行过程中产生异常,那么后面的函数是不能执行的。
    2:委托执行的返回值,当绑定多个函数的时候,委托执行的返回值是最后一个绑定函数执行的返回值。当委托绑定多个函数的时候,注意不要把异常扩散出来,其次委托类型的返回值为“void”.
    好了到这了吧,希望对你有所帮助!
  

本文出自 “F_Pirate” 博客,请务必保留此出处http://cancel.blog.51cto.com/133022/40797

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值