LinkButton
이벤트의 Command
이벤트 핸들러에 액세스하려고하지만 fieldInfo
의 스 니펫은 null입니다.리플렉션을 사용하여 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 PassantLinkButton
의 경우 필드 이름에을 사용하면 해결되지 않습니다.
이벤트에 명시 적으로 추가 및 제거 핸들러가 있고 전용 필드에 대리자를 저장하지 않는다고 가정합니다. –