ExtensionCollection.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / ExtensionCollection.cs / 1 / ExtensionCollection.cs

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

namespace System.ServiceModel 
{
    using System; 
    using System.Collections.Generic; 
    using System.Collections.ObjectModel;
    using System.Runtime.Serialization; 

    public sealed class ExtensionCollection : SynchronizedCollection>, IExtensionCollection
        where T : IExtensibleObject
    { 
        T owner;
 
        public ExtensionCollection(T owner) 
        {
            if (owner == null) 
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("owner");

            this.owner = owner;
        } 

        public ExtensionCollection(T owner, object syncRoot) : base(syncRoot) 
        { 
            if (owner == null)
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("owner"); 

            this.owner = owner;
        }
 
        bool ICollection>.IsReadOnly
        { 
            get { return false; } 
        }
 
        protected override void ClearItems()
        {
            IExtension[] array;
 
            lock (this.SyncRoot)
            { 
                array = new IExtension[this.Count]; 
                this.CopyTo(array, 0);
                base.ClearItems(); 

                foreach (IExtension extension in array)
                {
                    extension.Detach(this.owner); 
                }
            } 
        } 

        public E Find() 
        {
            List> items = this.Items;

            lock (this.SyncRoot) 
            {
                for (int i=this.Count-1; i>=0; i--) 
                { 
                    IExtension item = items[i];
                    if (item is E) 
                        return (E)item;
                }
            }
 
            return default(E);
        } 
 
        public Collection FindAll()
        { 
            Collection result = new Collection();
            List> items = this.Items;

            lock (this.SyncRoot) 
            {
                for (int i=0; i item = items[i];
                    if (item is E) 
                        result.Add((E)item);
                }
            }
 
            return result;
        } 
 
        protected override void InsertItem(int index, IExtension item)
        { 
            if (item == null)
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("item");

            lock (this.SyncRoot) 
            {
                item.Attach(this.owner); 
                base.InsertItem(index, item); 
            }
        } 

        protected override void RemoveItem(int index)
        {
            lock (this.SyncRoot) 
            {
                this.Items[index].Detach(this.owner); 
                base.RemoveItem(index); 
            }
        } 

        protected override void SetItem(int index, IExtension item)
        {
            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.SFxCannotSetExtensionsByIndex))); 
        }
    } 
} 

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


                        

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