c# - 快照将事件处理程序值作为 C# 中的方法参数

标签 c# events delegates

从这里question (和 others )有这个在调用之前对事件处理程序值进行快照的示例:

var tmp = _myEventHandler;
if(tmp != null) {
    tmp(sender, args);
}

但是,如果我将事件处理程序和参数传递给一个函数,它会做同样的事情吗?

protected void Invoke(MyEventHandler handler, MyEventArgs args)
{
    if (handler != null)
        handler(this, args);
}

我会说是的,但在考虑之后我不知道它是否相同 - 比如优化过程是否可以内联此函数并删除快照变量?

最佳答案

它确实做了同样的事情。该代码只是检查事件处理程序是否为非空,因此可用于引发。此代码对于字段/参数/本地没有什么不同。 C# 编译器或 JITer 不能以删除临时文件的方式内联它,因为它会改变程序的语义。

关于c# - 快照将事件处理程序值作为 C# 中的方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8962359/

相关文章:

C# 打印委托(delegate)

C# 从 phpmyadmin 选择

wpf - 是否有可用的EventTrigger EventNames列表?

ios - 为什么我的委托(delegate)方法没有在 Storyboard中调用?

javascript - Vuejs 从 $on 事件调用方法

javascript - React + TypeScript : Scroll event type not assignable to window. addEventListener

ios - 在多个屏幕上使用相同的 UITableViewController

c# - Scrollview 和 Mozilla PDF.js 的滚动错误

c# - DotNetOpenAuth 在修改后编译但在运行示例项目时抛出运行时异常

c# - 通过代码创建一个新的 OneNote 页面