EventHandlerList.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / CompMod / System / ComponentModel / EventHandlerList.cs / 1305376 / EventHandlerList.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.ComponentModel { 
    using System; 
    using System.Diagnostics.CodeAnalysis;
    using System.Security.Permissions; 

    /// 
    ///    Provides a simple list of delegates. This class cannot be inherited.
    ///  
    [HostProtection(SharedState = true)]
    public sealed class EventHandlerList : IDisposable { 
 
        ListEntry head;
        Component parent; 

        /// 
        ///    Creates a new event handler list.
        ///  
        [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")]
        public EventHandlerList() 
        { 
        }
 
        /// 
        ///     Creates a new event handler list.  The parent component is used to check the component's
        ///     CanRaiseEvents property.
        ///  
        [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")]
        internal EventHandlerList(Component parent) 
        { 
            this.parent = parent;
        } 

        /// 
        ///    Gets or sets the delegate for the specified key.
        ///  
        public Delegate this[object key] {
            [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] 
            get { 
                ListEntry e = null;
                if (parent == null || parent.CanRaiseEventsInternal) 
                {
                    e = Find(key);
                }
                if (e != null) { 
                    return e.handler;
                } 
                else { 
                    return null;
                } 
            }
            set {
                ListEntry e = Find(key);
                if (e != null) { 
                    e.handler = value;
                } 
                else { 
                    head = new ListEntry(key, value, head);
                } 
            }
        }

        ///  
        ///    [To be supplied.]
        ///  
        [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] 
        public void AddHandler(object key, Delegate value) {
            ListEntry e = Find(key); 
            if (e != null) {
                e.handler = Delegate.Combine(e.handler, value);
            }
            else { 
                head = new ListEntry(key, value, head);
            } 
        } 

        ///  allows you to add a list of events to this list  
        public void AddHandlers(EventHandlerList listToAddFrom) {

            ListEntry currentListEntry = listToAddFrom.head;
            while (currentListEntry != null) { 
                AddHandler(currentListEntry.key, currentListEntry.handler);
                currentListEntry = currentListEntry.next; 
            } 
        }
 
        /// 
        ///    [To be supplied.]
        /// 
        public void Dispose() { 
            head = null;
        } 
 
        private ListEntry Find(object key) {
            ListEntry found = head; 
            while (found != null) {
                if (found.key == key) {
                    break;
                } 
                found = found.next;
            } 
            return found; 
        }
 
        /// 
        ///    [To be supplied.]
        /// 
        [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] 
        public void RemoveHandler(object key, Delegate value) {
            ListEntry e = Find(key); 
            if (e != null) { 
                e.handler = Delegate.Remove(e.handler, value);
            } 
            // else... no error for removal of non-existant delegate
            //
        }
 
        private sealed class ListEntry {
            internal ListEntry next; 
            internal object key; 
            internal Delegate handler;
 
            public ListEntry(object key, Delegate handler, ListEntry next) {
                this.next = next;
                this.key = key;
                this.handler = handler; 
            }
        } 
    } 

 
}



// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.ComponentModel { 
    using System; 
    using System.Diagnostics.CodeAnalysis;
    using System.Security.Permissions; 

    /// 
    ///    Provides a simple list of delegates. This class cannot be inherited.
    ///  
    [HostProtection(SharedState = true)]
    public sealed class EventHandlerList : IDisposable { 
 
        ListEntry head;
        Component parent; 

        /// 
        ///    Creates a new event handler list.
        ///  
        [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")]
        public EventHandlerList() 
        { 
        }
 
        /// 
        ///     Creates a new event handler list.  The parent component is used to check the component's
        ///     CanRaiseEvents property.
        ///  
        [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")]
        internal EventHandlerList(Component parent) 
        { 
            this.parent = parent;
        } 

        /// 
        ///    Gets or sets the delegate for the specified key.
        ///  
        public Delegate this[object key] {
            [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] 
            get { 
                ListEntry e = null;
                if (parent == null || parent.CanRaiseEventsInternal) 
                {
                    e = Find(key);
                }
                if (e != null) { 
                    return e.handler;
                } 
                else { 
                    return null;
                } 
            }
            set {
                ListEntry e = Find(key);
                if (e != null) { 
                    e.handler = value;
                } 
                else { 
                    head = new ListEntry(key, value, head);
                } 
            }
        }

        ///  
        ///    [To be supplied.]
        ///  
        [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] 
        public void AddHandler(object key, Delegate value) {
            ListEntry e = Find(key); 
            if (e != null) {
                e.handler = Delegate.Combine(e.handler, value);
            }
            else { 
                head = new ListEntry(key, value, head);
            } 
        } 

        ///  allows you to add a list of events to this list  
        public void AddHandlers(EventHandlerList listToAddFrom) {

            ListEntry currentListEntry = listToAddFrom.head;
            while (currentListEntry != null) { 
                AddHandler(currentListEntry.key, currentListEntry.handler);
                currentListEntry = currentListEntry.next; 
            } 
        }
 
        /// 
        ///    [To be supplied.]
        /// 
        public void Dispose() { 
            head = null;
        } 
 
        private ListEntry Find(object key) {
            ListEntry found = head; 
            while (found != null) {
                if (found.key == key) {
                    break;
                } 
                found = found.next;
            } 
            return found; 
        }
 
        /// 
        ///    [To be supplied.]
        /// 
        [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] 
        public void RemoveHandler(object key, Delegate value) {
            ListEntry e = Find(key); 
            if (e != null) { 
                e.handler = Delegate.Remove(e.handler, value);
            } 
            // else... no error for removal of non-existant delegate
            //
        }
 
        private sealed class ListEntry {
            internal ListEntry next; 
            internal object key; 
            internal Delegate handler;
 
            public ListEntry(object key, Delegate handler, ListEntry next) {
                this.next = next;
                this.key = key;
                this.handler = handler; 
            }
        } 
    } 

 
}



// File provided for Reference Use Only by Microsoft Corporation (c) 2007.

                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK