我试图理解“回调模式”。每个答案都说这是由代表们完成的(我知道他们)。但答案的代码是这样的:
public delegate void Callback(string result);
public void Test()
{
CallBack callback = CallbackFunction;
DoWork(callback);
}
public void DoWork(CallBack callback)
{
callback("Hello world");
}
public void CallbackFunction(string result)
{
Console.WriteLine(result);
}
我真的不明白,为什么我们需要代表呢?我们也可以这样做吗?
public void Test()
{
DoWork();
}
public void DoWork()
{
CallbackFunction("Hello world");
}
public void CallbackFunction(string result)
{
Console.WriteLine(result);
}
除此之外,例如在Java中,回调意味着在事件发生后实际“返回”主程序的“特定功能”。但是当我们使用委托时,这不仅仅是在调用另一种方法吗?
我们如何进行最终在失败时调用OnFail()
方法的回调,以及在成功时调用OnSuccess()
方法。我真的很困惑。有人可以帮助我理解这个吗?
答案 0 :(得分:0)
委托安全地将方法,一种模板封装到其签名中的函数中。有时很容易认为它是指向函数的指针。
在您的示例中,CallbackFunction
可以设置为Callback
,因为它们的定义只需要一个字符串参数。
您可以使用Action
和Func
代替delegate
。它们之间的区别在于Action
不会返回某些内容而Func
会返回。样本:
public void Test(Action success, Action<Exception> error)
{
try
{
// perform some task
success();
}
catch (Exception ex)
{
error(ex);
}
}
并使用它:
Test(() => { Console.WriteLine("Success"); },
(ex) => { Console.WriteLine($"Error: {ex.Message}"); });
Action
的泛型选项是您可以传递给此方法的参数类型。在示例中,Exception
是一个传递给error
Action
的参数。这同样适用于Func<>
,但Func
的最后一种类型是结果类型。