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); }