gpt4 book ai didi

c# - 初始化事件与检查 null

转载 作者:太空狗 更新时间:2023-10-29 23:25:00 27 4
gpt4 key购买 nike

<分区>

基本上这已经在我脑子里想了一段时间了......我想看看你的意见

我读了 Jon Skeet 的一本好书:C# in Depth, Second Edition 并且建议在声明自定义事件时使用类似这样的内容:

public event Action<string> MyEvent = delegate { };

这个声明将在触发事件之前将我们从无效性检查语句中释放出来,所以不要这样:

    if (this.MyEvent != null)
{
this.MyEvent("OMG osh");
}

我们可以简单地调用:

this.MyEvent("OMG osh");

而且我们的代码会正常工作。

当您像这样声明事件时,该事件将使用一个空委托(delegate)进行初始化,因此我们无需检查是否为 null。

这是另一种声明事件的方式,它们是等价的

private Action<string> myDelegate;
public event Action<string> MyEvent
{
add
{
this.myDelegate += value;
}
remove
{
this.myDelegate -= value;
}
}

更多信息:http://csharpindepth.com/Articles/Chapter2/Events.aspx

我刚刚和一些同事讨论过,在工作中我们正在讨论这个话题,他们争论说有时候我们需要一次清除事件的所有订阅,我们可以简单地将 null 分配给后面的委托(delegate),如果我们想继续使用相同的模式,我们将不得不用一个空委托(delegate)重新初始化事件。他们也在问在多线程场景下会发生什么,这是我提出这个问题的主要原因

问题

  1. 我想知道在按照此模式声明事件与检查 null 时是否有一些隐藏的含义(可能在使用多线程时)

  2. 如果我使用此模式,我将有效地删除几个 if 条件,从而删除 jump 语句。这在整体性能方面不是更好吗?

干杯

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