File: System\Collections\ObjectModel\FreezableCollection.cs
Project: ndp\cdf\src\WCF\ServiceModel\System.ServiceModel.csproj (System.ServiceModel)
//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//----------------------------------------------------------------
 
namespace System.Collections.ObjectModel
{
    using System;
    using System.Collections.Generic;
    using System.ServiceModel;
 
    class FreezableCollection<T> : Collection<T>, ICollection<T>
    {
        bool frozen;
 
        public FreezableCollection()
            : base()
        {
        }
 
        public FreezableCollection(IList<T> list)
            : base(list)
        {
        }
 
        public bool IsFrozen
        {
            get
            {
                return this.frozen;
            }
        }
 
        bool ICollection<T>.IsReadOnly
        {
            get
            {
                return this.frozen;
            }
        }
 
        public void Freeze()
        {
            this.frozen = true;
        }
 
        protected override void ClearItems()
        {
            ThrowIfFrozen();
            base.ClearItems();
        }
 
        protected override void InsertItem(int index, T item)
        {
            ThrowIfFrozen();
            base.InsertItem(index, item);
        }
 
        protected override void RemoveItem(int index)
        {
            ThrowIfFrozen();
            base.RemoveItem(index);
        }
 
        protected override void SetItem(int index, T item)
        {
            ThrowIfFrozen();
            base.SetItem(index, item);
        }
 
        void ThrowIfFrozen()
        {
            if (this.frozen)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.ObjectIsReadOnly));
            }
        }
    }
}