我正在編寫一些使用事件的C#代碼,並且Resharper詢問我是否想創建事件調用者。它生成以下代碼:事件調用者的目的是什麼?
LowFuel handler = lowFuel;
if (handler != null) handler();
也許我失去了一些東西還是有點生疏,但什麼是事件調用器?我知道處理器是事件的實際邏輯將去的地方。
由於
我正在編寫一些使用事件的C#代碼,並且Resharper詢問我是否想創建事件調用者。它生成以下代碼:事件調用者的目的是什麼?
LowFuel handler = lowFuel;
if (handler != null) handler();
也許我失去了一些東西還是有點生疏,但什麼是事件調用器?我知道處理器是事件的實際邏輯將去的地方。
由於
事件調用器(可怕術語)是簡單地調用該事件的代碼。
從您的代碼示例中不是100%清楚,但通常您會聲明LowFuel
與使用分開(可能在一個接口中),這就是爲什麼您需要在調用它之前檢查它的原因。
顧名思義,它是一種用於提升事件的方法。它通常比直接調用委託要好,原因有幾個,因爲它在調用它之前檢查處理器是否爲空(所以你不需要檢查每次你想調用事件)。
另外,請注意,默認情況下,Resharper創建事件調用者爲公共和非虛擬。恕我直言,它不應該是公開的,它通常沒有任何意義,從類聲明它的外部調用一個事件。此外,使此方法變爲虛擬通常很有用,因此您可以在派生類中重寫它,而不是訂閱基類的事件。我總是聲明以下事件調用者:
protected virtual void OnFoo(FooEventArgs args)
{
var handler = Foo;
if (handler != null)
handler(this, args);
}