C#中的委托
这么理解对不对?如果不对那么什么情况下该用委托呢?
求大神指点一二 展开
大体上理解对了。
一言以蔽之,委托就是一个【特殊的类】,它定义了方法的类型,可以将方法(或者说函数、过程,下同,不再重复)当作另一个方法的参数来进行传递,【实现了对方法的封装】。这种将方法动态地赋值给参数的做法,可以避免在程序中大量使用 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); // 传递参数
以上。作为一点个人浅见,希望能对题主有所启发。(代码未经测试,仅供参考)