gpt4 book ai didi

c# - 复制委托(delegate)

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

我刚刚在 events 上阅读了一页在 MSDN 上,我发现了一段令我困惑的示例代码。

有问题的代码是这样的:

// Make a temporary copy of the event to avoid possibility of
// a race condition if the last subscriber unsubscribes
// immediately after the null check and before the event is raised.
EventHandler<CustomEventArgs> handler = RaiseCustomEvent;

我理解代码的意图,但我看不出那条特定的行是如何复制任何东西的。它所做的只是复制引用;它实际上并没有制作委托(delegate)实例的深拷贝。因此,就此而言,它实际上根本无法阻止竞争条件。

我是否遗漏了一些明显的东西?

最佳答案

委托(delegate)是不可变的,因此在该代码中获得的引用保证不会改变。如果用户在 null 检查后订阅或取消订阅,将创建一个新的委托(delegate)并将其设置为该事件。但是,由于您引用了一个完全不同的对象并调用它,所以您不必担心它为空。

关于c# - 复制委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1609430/

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