4
執行事件時,可以提供代碼add
和remove
事件處理程序。然而,事件可以通過三種方式獲得:爲什麼事件不提供3個訪問器方法?
MyEvent += Handler; // add accessor
MyEvent -= Handler; // remove accessor
MyEvent(this, EventArgs.Empty); // not supported by an accessor
豈不是明顯有被稱爲invoke
另一個訪問,負責呢?我的想法是:
class BaseClass
{
public virtual event EventHandler MyEvent { add; remove; protected invoke; }
}
class DerivedClass : BaseClass
{
public override event EventHandler MyEvent
{
invoke
{
// new code before event
base.MyEvent(this, ...);
// new code after event
}
}
}
我知道old-style pattern,這是實施OnMyEvent(...)
方法。但有兩次與該方法重要的缺點:
- 事件代碼分散 - >組織化程度較低的代碼庫
- 你不能簡單的重構事件(例如,將其重命名)
編輯:很明顯,編譯器團隊已經爲此功能而設計(請參閱GetRaiseMethod()
)。
你是什麼意思的「自己」? – Matthias 2012-07-31 09:41:18
如果你可以去做'button1.Click(...)',那麼它會引發事件,而不會被按鈕本身觸發。只有Button類應該能夠引發事件。這就是爲什麼你可以在定義它的類中調用它,但不能以其他方式調用它。 – Lucero 2012-07-31 09:43:44
我知道。添加了更多的解釋。希望這個幫助。 – Matthias 2012-07-31 09:48:40