C#获取事件绑定的方法
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,从本例子来说这不是必须的。但事件还是建议更多在界面控件上使用。
又或者说事件适合于两个线程的业务是比较分隔的对象。就是说事件内各个绑定的方法内的代码应该是一个比较完整逻辑代码。
对于复杂业务,某些人可能会使用事件绑定来影响主业务流程。但我建议直接调用不同逻辑类的方法。我们可以通用方法名与其参数,大概知道方法做了什么。而事件则完全隐藏了工作的内容,这不利于快速阅读和快速了解业务全貌。