我要訪問一個LinkButton
的Command
事件的事件處理程序,但在片段波紋管fieldInfo
爲空。爲什麼我不能使用反射獲得LinkButton事件的事件處理程序?
LinkButton button = new LinkButton();
button.Command += (s, e) => { };
Type type = button.GetType();
EventInfo[] eventInfos = type.GetEvents(BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
foreach (EventInfo eventInfo in eventInfos)
if (eventInfo.Name == "Command")
{
// fieldInfo is null
FieldInfo fieldInfo = eventInfo.DeclaringType.GetField(eventInfo.Name, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
Delegate delegates = (Delegate)fieldInfo.GetValue(button);
foreach (Delegate handler in delegates.GetInvocationList())
{
eventInfo.RemoveEventHandler(button, handler);
// or
eventInfo.AddEventHandler(button, handler);
// or do whatever with handler
}
}
代碼片段的靈感來源於this。
爲什麼fieldInfo
空?
是否有另一種方式來獲得一個LinkButton
的Command
事件的事件處理程序?
還Hans Passant溶劑不能在LinkButton
上使用Command
作爲字段名稱。
我假設事件有明確的添加和移除處理程序,它代表不存儲在專用領域。 –