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

标签 c# .net function byref

我目前正在将 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/

相关文章:

Python简单 turtle 程序

c# - Unity汽车自行转向

c# - .NET正则表达式识别 `if .. then .. else .. endif`

c# - 尝试结帐时 PayPal 功能中的 GetResponse() 错误

c# - 通过指纹查找证书

java - 为什么 Java 8 中没有 BooleanConsumer?

c# - 处理由反序列化空值引起的错误

c# - Selenium 等待用户验证码输入 C#

c# - 如何触发依赖于其他 2 个或更多并行事件完成的事件?

javascript - 在循环中更改 img src 属性值 - jquery