internal EventDescriptorCollection GetEvents()
{
// Worst case collision scenario: we don't want the perf hit
// of taking a lock, so if we collide we will query for
// events twice. Not a big deal.
//
if (_events == null)
{
EventDescriptor[] eventArray;
Dictionary<string, EventDescriptor> eventList = new Dictionary<string, EventDescriptor>(16);
Type baseType = _type;
Type objType = typeof(object);
do
{
eventArray = ReflectGetEvents(baseType);
foreach (EventDescriptor ed in eventArray)
{
if (!eventList.ContainsKey(ed.Name))
{
eventList.Add(ed.Name, ed);
}
}
baseType = baseType.GetTypeInfo().BaseType;
}
while (baseType != null && baseType != objType);
eventArray = new EventDescriptor[eventList.Count];
eventList.Values.CopyTo(eventArray, 0);
_events = new EventDescriptorCollection(eventArray, true);
}
return _events;
}