基本上这已经在我脑海中有一段时间了......我想看看你的意见
我读了 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");
我们的代码就可以工作了。
当您像这样声明事件时,该事件将使用空委托初始化,因此我们不需要检查是否为空。
这是声明事件的另一种方式,它们是等价的
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 分配给后面的代表如果我们想继续使用相同的模式,我们将不得不使用空委托重新初始化事件。他们还问在多线程场景中会发生什么,这就是我提出这个问题的主要原因
问题
我想知道在声明遵循此模式的事件与检查 null 时是否存在一些隐藏的含义(可能在使用多线程时)
如果我使用这种模式,我将有效地删除几个
if
条件,从而删除跳转语句。这在整体性能方面不是更好吗?
干杯