gpt4 book ai didi

c# - 为什么在调用之前为事件分配处理程序?

转载 作者:可可西里 更新时间:2023-11-01 08:42:42 26 4
gpt4 key购买 nike

基本上,我经常看到这个:

    public event MyEventHandler MyEvent;

private void SomeFunction()
{
MyEventHandler handler = this.MyEvent;

if (handler != null)
{
handler(this, new MyEventArgs());
}
}

当它可以像这样轻松完成时:

    public event MyEventHandler MyEvent;

private void SomeFunction()
{
if (MyEvent != null)
{
MyEvent(this, new MyEventArgs());
}
}

那么,我是不是漏掉了什么?人们是否有某种原因将事件分配给处理程序,然后引发处理程序而不是事件本身?这只是“最佳实践”吗?

最佳答案

局部变量的赋值确保如果事件在 if 和实际调用之间取消注册,调用列表将不会为空(因为变量将有一个副本 原始调用列表)。

这在多线程代码中很容易发生,在检查 null 和触发事件之间,它可能被另一个线程取消注册。

参见 this所以问题和答案。

关于c# - 为什么在调用之前为事件分配处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5147397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com