如何接受函数引用作为参数



我当前正在将一个EventHandler对象传递给如下的util函数:

Timer newTimer(int interval, System.Timers.ElapsedEventHandler handler) {
    ....
    timer.Elapsed += handler;
    ....
}
newTimer(1000, new System.Timers.ElapsedEventHandler(myTimer_Tick));

但这是丑陋的,并迫使每个调用方创建一个EventHandler对象。我该怎么把它改成这样?

Timer newTimer(int interval, ref Function handler) {
    ....
    timer.Elapsed += new System.Timers.ElapsedEventHandler(handler);
    ....
}
newTimer(1000, ref myTimer_Tick);

不清楚为什么在这里使用ref,但如果myTimer_Tick具有正确的签名,则根本不需要更改方法-只需使用:

newTimer(1000, myTimer_Tick);

这使用方法组转换,而不是显式委托创建语句。不过它也有同样的作用。

如果您希望能够使用无参数的void方法,您可以编写一个助手方法来获取Action,并通过lambda表达式将其封装在ElapsedEventHandler中:

Timer StartTimer(int interval, Action action)
{
    ...
    timer.Elapsed = (sender, args) => action();
    ...
}

相关内容

  • 没有找到相关文章

最新更新