class Plane
{
public event EventHandler Land;
protected void OnLand()
{
if ( null != Land )
{
Land( this, null );
}
}
}
这是事件处理程序的最佳做法:
EventHandler temp = Land;
if ( null != temp )
{
temp( this, null );
}
真的有必要吗?在什么情况下可能与Land不同?
答案 0 :(得分:6)
在多线程访问的情况下,我相信。如果你没有缓存引用,另一个线程可以在你的后卫之后但在你开火之前将其清空。
答案 1 :(得分:2)
如果你有许多线程修改Land
并发。
答案 2 :(得分:1)
在测试和加注之间,最后一个处理程序被另一个线程从列表中删除。
当事件的invokation列表发生变化时,它将被复制,临时引用仍将保留原始列表。