MarshalByValueComponent.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

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

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

namespace System.ComponentModel { 
 
    using System;
    using System.ComponentModel.Design; 
    using System.Diagnostics.CodeAnalysis;
    using System.Security.Permissions;
    using System.Runtime.InteropServices;
 
    /// 
    /// Provides the base implementation for , 
    ///    which is the base class for all components in Win Forms. 
    /// 
    [ 
        ComVisible(true),
        Designer("System.Windows.Forms.Design.ComponentDocumentDesigner, " + AssemblyRef.SystemDesign, typeof(IRootDesigner)),
        DesignerCategory("Component"),
        TypeConverter(typeof(ComponentConverter)) 
    ]
    public class MarshalByValueComponent : IComponent, IServiceProvider { 
 
        /// 
        ///    Static hask key for the Disposed event. This field is read-only. 
        /// 
        private static readonly object EventDisposed = new object();

        private ISite site; 
        private EventHandlerList events;
 
        ///  
        /// Initializes a new instance of the  class.
        ///  
        public MarshalByValueComponent() {
        }

        ~MarshalByValueComponent() { 
            Dispose(false);
        } 
 
        /// 
        ///    Adds a event handler to listen to the Disposed event on the component. 
        /// 
        public event EventHandler Disposed {
            add {
                Events.AddHandler(EventDisposed, value); 
            }
            remove { 
                Events.RemoveHandler(EventDisposed, value); 
            }
        } 

        /// 
        ///    Gets the list of event handlers that are attached to this component.
        ///  
        protected EventHandlerList Events {
            get { 
                if (events == null) { 
                    events = new EventHandlerList();
                } 
                return events;
            }
        }
 
        /// 
        ///    Gets or sets the site of the component. 
        ///  
        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public virtual ISite Site { 
            get { return site;}
            set { site = value;}
        }
 
        /// 
        ///    Disposes of the resources (other than memory) used by the component. 
        ///  
        [SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed")]
        public void Dispose() { 
            Dispose(true);
            GC.SuppressFinalize(this);
        }
 
        /// 
        ///     
        ///    Disposes all the resources associated with this component. 
        ///    If disposing is false then you must never touch any other
        ///    managed objects, as they may already be finalized. When 
        ///    in this state you should dispose any native resources
        ///    that you have a reference to.
        ///    
        ///     
        ///    When disposing is true then you should dispose all data
        ///    and objects you have references to. The normal implementation 
        ///    of this method would look something like: 
        ///    
        ///     
        ///    public void Dispose() {
        ///        Dispose(true);
        ///        GC.SuppressFinalize(this);
        ///    } 
        ///
        ///    protected virtual void Dispose(bool disposing) { 
        ///        if (disposing) { 
        ///            if (myobject != null) {
        ///                myobject.Dispose(); 
        ///                myobject = null;
        ///            }
        ///        }
        ///        if (myhandle != IntPtr.Zero) { 
        ///            NativeMethods.Release(myhandle);
        ///            myhandle = IntPtr.Zero; 
        ///        } 
        ///    }
        /// 
        ///    ~MyClass() {
        ///        Dispose(false);
        ///    }
        ///     
        ///    
        ///    For base classes, you should never override the Finalier (~Class in C#) 
        ///    or the Dispose method that takes no arguments, rather you should 
        ///    always override the Dispose method that takes a bool.
        ///     
        ///    
        ///    protected override void Dispose(bool disposing) {
        ///        if (disposing) {
        ///            if (myobject != null) { 
        ///                myobject.Dispose();
        ///                myobject = null; 
        ///            } 
        ///        }
        ///        if (myhandle != IntPtr.Zero) { 
        ///            NativeMethods.Release(myhandle);
        ///            myhandle = IntPtr.Zero;
        ///        }
        ///        base.Dispose(disposing); 
        ///    }
        ///     
        ///  
        protected virtual void Dispose(bool disposing) {
            if (disposing) { 
                lock(this) {
                    if (site != null && site.Container != null) {
                        site.Container.Remove(this);
                    } 
                    if (events != null) {
                        EventHandler handler = (EventHandler)events[EventDisposed]; 
                        if (handler != null) handler(this, EventArgs.Empty); 
                    }
                } 
            }
        }

        ///  
        ///    Gets the container for the component.
        ///  
        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
        public virtual IContainer Container {
            get { 
                ISite s = site;
                return s == null ? null : s.Container;
            }
        } 

        ///  
        /// Gets the implementer of the . 
        /// 
        public virtual object GetService(Type service) { 
            return((site==null)? null : site.GetService(service));
        }

 
        /// 
        ///    Gets a value indicating whether the component is currently in design mode. 
        ///  
        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public virtual bool DesignMode { 
            get {
                ISite s = site;
                return(s == null) ? false : s.DesignMode;
            } 
        }
        ///  
        ///  
        ///    
        ///       Returns a  containing the name of the  , if any. This method should not be 
        ///       overridden. For
        ///       internal use only.
        ///    
        ///  
        public override String ToString() {
            ISite s = site; 
 
            if (s != null)
                return s.Name + " [" + GetType().FullName + "]"; 
            else
                return GetType().FullName;
        }
    } 
}

// 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