反射 獲取事件註冊列表

2021-08-25 10:27:45 字數 1186 閱讀 7938

說來很簡單,gettype().getfield("事件名",bindingflags.instance | bindingflags.nonpublic);

然後呼叫getvalue就可以得到對應的委託了。既然有委託了。呼叫getinvokelist就可以了。

需要注意一點,vb.net的事件,反射時需要在事件名後面多寫乙個event。不多說。分別貼出**供參考和自己備用,雖然實在簡單到不需要備份例子。以防萬一吧。

c#using system; using system.reflection; namespace geteventlist } static void main(string args) ; fieldinfo fi = obj.gettype().getfield("myevent", bindingflags.instance | bindingflags.nonpublic); delegate del = fi.getvalue(obj) as delegate; if (del != null) } console.readkey(); } } }

vb.net

imports system.reflection module module1 sub main() dim obj as new eventtestclass '註冊事件 addhandler obj.myevent, function(v as integer) v + 1 '反射獲取事件委託列表 dim fi as fieldinfo = obj.gettype().getfield("myeventevent", bindingflags.instance or bindingflags.nonpublic) dim del as system.delegate = fi.getvalue(obj) '如果註冊過,則不是nothing if del is nothing then console.writeline("尚未註冊事件") else console.writeline("註冊事件了") end if console.readkey() end sub public class eventtestclass public delegate sub myeventhandler(byval value as integer) public event myevent as myeventhandler public sub foo() raiseevent myevent(88) end sub end class end module

C 通過反射獲取列舉值列表

通過type.getfields bindingflags.static 獲取列舉值列表,然後通過fieldinfo.getvalue null 就能獲取到值,注意是傳入null,像獲取靜態值和常量那樣。返回的值可以直接強轉為int,因為列舉的基礎型別就是int。如果獲取所有的字段資訊,會發現裡面有...

註冊事件,反註冊事件,匿名事件

根據資料動態建立控制項及為控制項動態繫結事件 事件不只乙個,包括匿名方法 現在要訂閱乙個新事件同時取消這個控制項的所有事件.改用反射實現,用反射獲得button的eventhandler,並對它進行反註冊。方法一。propertyinfo propertyinfo typeof button get...

C 反射事件

反射出事件列表的方法 如果是 自己寫的類直接反射成員就可以獲取到委託集合了 例如public class test 我們在 中寫 private void button1 click object sender,eventargs e void testevent ok1 void testeven...