刚接触 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);
老实说,我不知道从哪里开始,所以感谢任何帮助
答案 0 :(得分:8)
声明一个签名与函数签名相匹配的委托。例如:
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
接口。不是传递记录器函数,而是传递记录器对象。
这样做有好处:
ILogger
的包装器对象,它本身在构造函数中接受 ILogger
对象的列表。例如。你可以传递一个控制台记录器和一个文件记录器。呼叫站点不需要知道您希望所有内容都被记录两次。换句话说。接口比委托更灵活。