我目前正在将 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);
这使用方法组转换而不是显式委托(delegate)创建语句。不过,它做同样的事情。
如果您希望能够使用无参数的 void 方法,您可以编写一个辅助方法来获取 Action
并通过 lambda 表达式将其包装在 ElapsedEventHandler
中:
Timer StartTimer(int interval, Action action)
{
...
timer.Elapsed = (sender, args) => action();
...
}
关于c# - 如何接受函数引用作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12234256/