在线急等,关于反射的
就是我有一堆的事件,例如:
this.editor.BindingManager.AddingNew += new Data.AddingNewEventHandler<TBORG_ADMIN>(Editor_AddingNew);
this.editor.BindingManager.AddingNew += new Data.AddingNewEventHandler<TBORG_TAXUNIT>(Editor_AddingNew);
this.editor.BindingManager.AddingNew += new Data.AddingNewEventHandler<TBORG_BASEUNIT>(Editor_AddingNew);
...(TBORG_ADMIN,TBORG_TAXUNIT...是EDM实体)
既然我全部都是Editor_AddingNew,我想用反射写一次就好了,不用写这么多的 +=。
反射代码如下:
EventInfo eventInfo = this.editor.BindingManager.GetType().GetEvent("AddingNew");
Delegate d = Delegate.CreateDelegate(eventInfo.EventHandlerType, this, "Editor_AddingNew");
eventInfo.AddEventHandler(this.editor.BindingManager, d);
如果参数类型一样的话是没错的(就是TBORG_ADMIN的,用回Data.AddingNewEventArgs<TBORG_ADMIN> e),如果用object,dynamic的话,到Delegate.CreateDelegate这步就报错了,说“无法绑定到目标方法,因为它的签名或安全透明与委托类型的签名或安全透明不兼容。”
Editor_AddingNew代码如下:
public void Editor_AddingNew(object sender, dynamic e)
{
e.NewObject.FLID = this.BindingManager.Current.FLID;
e.NewObject.FLNAME_L2 = this.BindingManager.Current.FLNAME_L2;
}
最后我问一下各位,用反射能不能实现,怎么实现?