title
author
date
createtime
categories
c# 反射呼叫私有事件
lindexi
2019-08-30 08:52:57 +0800
2018-09-19 20:44:19 +0800
c# 反射
假設有 a 類的**定義了乙個私有的事件
classa
remove
}}
通過反射可以拿到 a 的事件 fx 但是無法直接新增事件
vareventinfo
=typeof(a).getevent("fx"
, bindingflags.instance
|bindingflags.nonpublic);
如果這時直接呼叫 addeventhandler 就會出現下面異常
vareventinfo
=typeof(a).getevent("fx"
, bindingflags.instance
|bindingflags.nonpublic);
vara=
newa();
eventinfo.addeventhandler(a, new
eventhandler(fx));
void
fx(object
sender, eventargs
e)
system.invalidoperationexception:「由於不存在此事件的公共新增方法,因此無法新增該事件處理程式。」
解決的方法是呼叫 getaddmethod 的方法請看下面
vareventinfo
=typeof(a).getevent("fx"
, bindingflags.instance
|bindingflags.nonpublic);
varaddfx
=eventinfo.getaddmethod(true);
varremovefx
=eventinfo.getremovemethod(true);
vara=
newa();
addfx.invoke(a, new );
removefx.invoke(a, new );
void
fx(object
sender, eventargs
e)
參見 如果可能遇到型別轉換的異常system.argumanetexception:'object of type 'system.eventhandler1[system.eventargs]' cannot be converted to type 'system.eventhandler'.
,請看.net/c# 使用反射註冊事件 - walterlv
更多反射請看
win10 uwp 反射
.net core/framework 建立委託以大幅度提高反射呼叫的效能 - walterlv
設定 .net native 執行時指令以支援反射(尤其適用於 uwp) - walterlv
.net/c# 使用反射呼叫含 ref 或 out 引數的方法 - walterlv
.net/c# 推薦乙個我設計的快取型別(適合快取反射等耗效能的操作,附用法) - walterlv
C 反射呼叫私有事件
假設有 a 類的 定義了乙個私有的事件 class aremove 通過反射可以拿到 a 的事件 fx 但是無法直接新增事件 var eventinfo typeof a getevent fx bindingflags.instance bindingflags.nonpublic 如果這時直接呼...
2019 11 29 C 反射呼叫私有事件
title author date createtime categories c 反射呼叫私有事件 lindexi 2019 11 29 08 51 13 0800 2018 09 19 20 44 19 0800 c 反射 假設有 a 類的 定義了乙個私有的事件 class a remove 通...
利用反射機制呼叫私有方法
步驟1 獲取到當前執行緒的類載入器 classloader classloader thread.currentthread getcontextclassloader 步驟2 用類載入器獲取的class物件 class clazz classloader.loadclass com.wxw.tes...