public class MyEventArgs
{
}
public delegate void MyEventHandler(object sender,MyEventArgs args);
public class MyControlClass:Control { public event MyEventHandler MyEvent; public Delegate[] GetEventDelegates() { if(MyEvent!=null) return MyEvent.GetInvocationList(); else return null; } }
在類中直接使用event的GetInvocationList方法即可。那能否我們自己的判斷執行某一個綁定的方法呢?
Delegate current = delegates[i]; //..判斷current.Method各個屬性,如果調用 current.Method.Invoke(current.Target,new object[] { this,args } );
可能有人會問,爲什麼MyControlClass需要繼承自Control,從本例子來說這不是必須的。但事件還是建議更多在界面控件上使用。
又或者說事件適合於兩個線程的業務是比較分隔的對象。就是說事件內各個綁定的方法內的代碼應該是一個比較完整邏輯代碼。
對於複雜業務,某些人可能會使用事件綁定來影響主業務流程。但我建議直接調用不同邏輯類的方法。我們可以通用方法名與其參數,大概知道方法做了什麼。而事件則完全隱藏了工作的內容,這不利於快速閱讀和快速瞭解業務全貌。