在线急等,关于反射的

GZ_kenny GZ_kenny 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
就是我有一堆的事件,例如:
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;
}

最后我问一下各位,用反射能不能实现,怎么实现?
...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部
GZ_kenny
C# 111,128 成员 642,536 内容