System.ComponentModel.ReflectTypeDescriptionProvider.ReflectedTypeData.GetEvents C# (CSharp) Method

GetEvents() private method

Retrieves the events for this type.
private GetEvents ( ) : EventDescriptorCollection
return EventDescriptorCollection
            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;
            }