目前,我用下面的代碼來實現的事件,在一類,即最多可有註冊它一個事件處理程序:單用戶事件
private event EventHandler<EventArgs> e_Foo;
public event EventHandler<EventArgs> Foo {
add {
if (e_Foo != null && e_Foo.GetInvocationList().Any())
throw new InvalidOperationException("Only one event handler may be registered at a time.");
e_Foo += value;
}
remove {
e_Foo -= value;
}
}
private void OnFoo() {
if (e_Foo != null)
e_Foo(this, EventArgs.Empty);
}
- 有沒有更好的辦法?
- 有沒有什麼辦法可以把它包裝在一個類中,所以我不需要複製和粘貼這麼多的代碼?
訂閱多個事件處理程序有什麼問題? – dtb
@dtb,這裏只有一個用戶是有道理的。忘記取消會導致衝突,所以我想強制執行此操作。 –
我認爲你應該以某種方式解決這個問題,而不是通過改變事件的常規方式。順便說一句,你的代碼不能滿足你的要求,因爲委託實例可以有多個調用目標。 – dtb