在C#中实现回调

  • 本文关键字:回调 实现 c#
  • 更新时间 :
  • 英文 :


C#新手,并试图弄清楚如何进行回调。(如果这确实是回调(

我有很多电话都是这种格式的。。

connector.Subscribe(data1, data2, (element, value) =>
{
Log($"{element.Name}: {value}");
});

我希望它们都使用相同的函数,而不是将代码添加到每个函数中例如

public void somefunction(element, value)
{
Log($"{element.Name}: {value}");
}
connector.Subscribe(data1, data2, somefunction);

老实说,我不知道从哪里开始,所以任何帮助都很感激

用与函数签名匹配的签名声明委托。例如:

public delegate void MyCallback(string name, int value);

然后将Subscribe声明为

public void Subscribe(object data1, object data2, MyCallback myCallback)
{
}

然后你可以做你要求的:

connector.Subscribe(data1, data2, somefunction);

请注意,somefunction必须在此处不使用参数大括号的情况下编写。


解决问题的另一种方法是声明一个适当的接口。例如ILogger接口。您将传递一个记录器对象,而不是传递一个logger函数。

这具有以下优点:

  • 您可以注入一个记录器。请参阅依赖项注入(维基百科(
  • 您可以使用IoC容器(教程教师(将记录器配置为在中心位置使用
  • 您可以创建一个实现ILogger的包装器对象,该对象本身接受构造函数中的ILogger对象列表。例如,您可以将控制台记录器和文件记录器传递给它。呼叫站点不需要知道您希望所有内容都被记录两次
  • 如果你不想登录,你可以使用一个虚拟记录器什么都不做(再次不更改呼叫站点(

换句话说。接口比委托更灵活。

最新更新