上篇文章我们讲了委托的父类和多播委托,这篇博客来讲讲委托的回调(Callback)。
其实我一直不明白CallBack啥意思,就回调方法。
回调方法的具体解释是把方法当做一个参数传入其它方法中,C#代码中,我们可以使用委托实例来包装方法。
比如说,我写了个Game类,朋友写了个Load类,他需要我的值来判定登录的是哪个游戏,我这边需要把一个函数的返回值传给他里面,他就需要写一个回调函数来接受我的函数的返回值。
首先我先定义一个委托来包装我需要的函数,它返回一个int:
public delegate int PlayGame(string a);
我写的Game是这样的:
class Game
{
private string UserName;
public Game(string userName)
{
UserName = userName;
}
public int GameStart(string Gamename)
{
Console.WriteLine(UserName + "登录" + Gamename);
if(Gamename=="彩虹六号")
{
return 11;
}
else if(Gamename=="神界原罪")
{
return 22;
}
else
{
return 0;
}
}
}
他写的Load类需要知道我们的GameCode是多少,此时就用到了GamePlay委托来包装我们的函数参数:
class Load
{
private int GameCode;
public Load(string name,PlayGame play)
{
GameCode = play.Invoke(name);
if (GameCode == 11)
{
Console.WriteLine("我知道了,你玩的是彩虹六号");
}
else if (GameCode == 22)
{
Console.WriteLine("我知道了,你玩的是神界原罪");
}
else
{
Console.WriteLine("你玩的是个啥??");
}
}
}
}
主函数里直接调用就好了:
class Program
{
static void Main(string[] args)
{
Game game = new Game("熊思远");
PlayGame play = new PlayGame(game.GameStart);
Console.WriteLine("你玩的是哪个游戏啊");
string GameName = Console.ReadLine();
Load load = new Load(GameName,play);
}
}
这样的话,我们就把我们需要的的函数给到了我的朋友,他就知道我们打开的是哪个游戏,而且跟我们的耦合比较低。
这样,我就能传给朋友我玩的是哪个游戏了,他也能根据规则很好地判断出来:
这样就实现了回调,就是函数作为参数给我的朋友,这样啊的话我们的函数逻辑执行了我们要的函数,而且还传递了参数给我们的朋友。
委托回调:即我朋友的的处理中有一部分处理过程其实需要你来实现,需要你传一个“方法参数”给它。这就是委托回调的意义。
完整的委托回调的定义即:把委托类型的参数传入主调方法里面去,主调函数内部逻辑来表示我是否会调用这样一个委托里的方法,这样代码就像流水线一样运行。主调方法里的回调方法委托参数一般用于主调方法逻辑的末尾之处,且没有返回值。