private static EventInfo?GetBaseEventDefinition(RuntimeEventInfo evt)
{
MethodInfo?method = evt.GetAddMethod(true);
if (method == null || !method.IsVirtual)
{
method = evt.GetRaiseMethod(true);
}
if (method == null || !method.IsVirtual)
{
method = evt.GetRemoveMethod(true);
}
if (method == null || !method.IsVirtual)
{
return(null);
}
MethodInfo baseMethod = ((RuntimeMethodInfo)method).GetBaseMethod();
if (baseMethod != null && baseMethod != method)
{
BindingFlags flags = method.IsPublic ? BindingFlags.Public : BindingFlags.NonPublic;
flags |= method.IsStatic ? BindingFlags.Static : BindingFlags.Instance;
return(baseMethod.DeclaringType !.GetEvent(evt.Name, flags));
}
return(null);
}