C#中的委托

委托的作用是不是:当我们类中的某一个方法体无法确定,需要外部指定时,就使用委托?这么理解对不对?如果不对那么什么情况下该用委托呢?求大神指点一二... 委托的作用是不是:当我们类中的某一个方法体无法确定,需要外部指定时,就使用委托?
这么理解对不对?如果不对那么什么情况下该用委托呢?
求大神指点一二
展开
 我来答
然后去远足
2014-04-10 · TA获得超过1万个赞
知道大有可为答主
回答量:4016
采纳率:83%
帮助的人:2449万
展开全部

大体上理解对了。

 

一言以蔽之,委托就是一个【特殊的类】,它定义了方法的类型,可以将方法(或者说函数、过程,下同,不再重复)当作另一个方法的参数来进行传递,【实现了对方法的封装】。这种将方法动态地赋值给参数的做法,可以避免在程序中大量使用 if-else(switch) 语句,同时也使得程序具有更好的扩展性。

 

委托机制尤其适合在使用事件处理的编程模式或者类的静态方法中,以及在需要封装和灵活地组织方法的场合。

 

C# 中很多特性(比如跨线程回调等)都是建立在委托机制基础之上的。

 

单纯地文字叙述题主可能还是不大理解,那么我来举个例子。比如现在有这么一个方法,是出去旅行,在旅行过程中(也就是这个方法里)会做很多事情:

private void Travel()
{
    DriveCar(); // 开车前往目的地
    ... // 游玩
    ... // 拍照留念
    ... // ...
}

其中 DriveCar() 为另一个方法,代表开车。但是现在情况有变了,不能开车去了,改为坐火车去,但是剩下的一切照旧,这个时候,如果我们想实现 Travel() 这个方法,就不得不再写一遍:

private void Travel()
{
    TakeTrain(); // 坐火车前往目的地
    ... // 游玩
    ... // 拍照留念
    ... // ...
}

除了交通方式变化了,其他的又原封不动的抄了一遍。这还不是麻烦的,如果我的交通方式又变了,比如改成坐飞机、坐船、骑自行车、骑摩托车等等等等,那么还需要写若干个 Travel() 出来吗?

 

于是想到,为什么不能像把某一个对象当作参数传递给方法一样,也能【把方法(其实这里就不能叫做方法了,应该叫做方法应用)当作参数传递】呢?于是问题解决了:

private delegate void ByWhat(); // 定义委托
private ByWhat byWhat; // 声明委托  
private void Travel(ByWhat bw)
{
    bw(); // 交通方式 
    ... // 游玩
    ... // 拍照留念
    ... // ...
}    
private void DriveCar()

    // 开车
}
private void TakeTrain()
{
    // 坐火车
}
...

这样在使用的时候,如果要开车:

byWhat = new ByWhat(DriveCar); // 先实例化委托
Travel(byWhat);  // 传递参数

如果要坐火车:

byWhat = new ByWhat(TakeTrain); // 先实例化委托
Travel(byWhat);  // 传递参数

 

 

以上。作为一点个人浅见,希望能对题主有所启发。(代码未经测试,仅供参考)

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式