在线急等,关于反射的

GZ_kenny 2011-11-17 01:58:44
就是我有一堆的事件,例如:
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;
}

最后我问一下各位,用反射能不能实现,怎么实现?
...全文
123 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
GZ_kenny 2011-11-17
  • 打赏
  • 举报
回复
自己顶一下..........
GZ_kenny 2011-11-17
  • 打赏
  • 举报
回复
delegate是这样的
public delegate void AddingNewEventHandler<T>(object sender, AddingNewEventArgs<T> e);

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧