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