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

Rob*_*cks 4 .net c# function byref

我正在将一个EventHandler对象传递给这样的util函数:

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

newTimer(1000, new System.Timers.ElapsedEventHandler(myTimer_Tick));
Run Code Online (Sandbox Code Playgroud)

但这很丑陋,迫使每个调用者创建一个EventHandler对象.如何将其更改为此类似的内容?

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

newTimer(1000, ref myTimer_Tick);
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

目前还不清楚为什么你在ref这里使用,但如果myTimer_Tick有正确的签名,你根本不需要改变你的方法 - 你可以使用:

newTimer(1000, myTimer_Tick);
Run Code Online (Sandbox Code Playgroud)

这使用方法组转换而不是显式委托创建语句.它虽然做了同样的事情.

如果你想能够使用无参数的void方法,你可以编写一个帮助器方法来获取Action并将其包装在一个ElapsedEventHandler通过lambda表达式中:

Timer StartTimer(int interval, Action action)
{
    ...
    timer.Elapsed = (sender, args) => action();
    ...
}
Run Code Online (Sandbox Code Playgroud)