以下代码来自Josh Smith的MVVM示例:
/// <summary>
/// Raised when this workspace should be removed from the UI.
/// </summary>
public event EventHandler RequestClose;
void OnRequestClose()
{
//if (RequestClose != null)
// RequestClose(this, EventArgs.Empty);
EventHandler handler = this.RequestClose;
if (handler != null)
handler(this, EventArgs.Empty);
}
评论的行是我的补充。我的问题是注释行与未注释的行做同样的事情吗?那么为什么要创建另一个EventHandler引用呢?或者我在这里遗漏了什么?感谢
答案 0 :(得分:4)
Tanmoy是对的。这样做是为了防止在“if”之后但在“RequestClose()”之前的其他线程中更改RequestClose(例如为null)的可能性。
答案 1 :(得分:1)
没有区别 - 在这两种情况下,您都在使用相同的事件参考。我更喜欢您的评论代码。
享受!
答案 2 :(得分:1)
RequestClose可能被设置为null或另一个对象,可能是另一个线程,因为它是一个实例变量。将值分配给局部变量意味着您将始终具有对该事件的引用,并且其他线程无法更改该事件。希望这会有所帮助。