我對經常在線遇到的一段代碼有疑問。例如分配給空委託的事件聲明
public static event Action<Foo> foo = delegate{ };
我得到了聲明的左側。但右手邊很混亂。將事件分配給帶空括號的代表的意義何在?
我對經常在線遇到的一段代碼有疑問。例如分配給空委託的事件聲明
public static event Action<Foo> foo = delegate{ };
我得到了聲明的左側。但右手邊很混亂。將事件分配給帶空括號的代表的意義何在?
event
字段的默認值爲null
。這要求在每次想要提升事件時都使用空檢查 - 在未初始化的event
字段上調用foo()
將導致NullReferenceException
。僅僅給它一個合理的默認值就比較方便,就像無操作一樣,這樣你可以直接引發事件而不必使用包裝器方法或任何東西。
委託成員的默認值是null
,所以如果您不指定任何內容,它會在您嘗試調用它時拋出NullReferenceException
。你可以很容易地看到這可能是一個問題:想象一下,如果你必須訂閱OnKeyDown
每控制!
相當方便,在標準庫事件把守,它不等同的事情:
Event handler = OnClick
if (handler != null)
handler(this, new EventArgs());
這是我建議,作爲表單 - 反正我 - 它看起來更乾淨。另請注意使用局部變量。它是合法的,它寫成
if(OnClick != null) OnClick(this, new EventArgs());
,但不是線程安全的,因爲聽者的OnClick可以空校驗和通話之間退訂。