我当前正在将一个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();
...
}