Я хочу получить доступ к обработчику события 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
null?
Есть ли другой способ получить обработчик события LinkButton
Command
?
Также Hans Passant разрешение не работает на LinkButton
с использованием Command
в качестве названия поля.
Я предполагаю, что событие имеет явное добавление и удаление обработчиков и не сохраняет его делегат в выделенном поле. –