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
对象列表。例如,您可以将控制台记录器和文件记录器传递给它。呼叫站点不需要知道您希望所有内容都被记录两次 - 如果你不想登录,你可以使用一个虚拟记录器什么都不做(再次不更改呼叫站点(
换句话说。接口比委托更灵活。