The Labs \ Source Viewer \ SSCLI \ System.Configuration \ SettingsPropertyCollection

  1. //------------------------------------------------------------------------------
  2. // <copyright file="SettingsPropertyCollection.cs" company="Microsoft">
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. // </copyright>
  14. //------------------------------------------------------------------------------
  15. namespace System.Configuration
  16. {
  17.     using System.Collections;
  18.     using System.Collections.Specialized;
  19.     using System.Runtime.Serialization;
  20.     using System.Configuration.Provider;
  21.     using System.Globalization;
  22.     using System.IO;
  23.     using System.Runtime.Serialization.Formatters.Binary;
  24.     using System.Xml.Serialization;
  25.     using System.ComponentModel;
  26.    
  27.     ////////////////////////////////////////////////////////////
  28.     ////////////////////////////////////////////////////////////
  29.     ////////////////////////////////////////////////////////////
  30.     public class SettingsPropertyCollection : IEnumerable, ICloneable, ICollection
  31.     {
  32.         private Hashtable _Hashtable = null;
  33.         private bool _ReadOnly = false;
  34.        
  35.        
  36.         ////////////////////////////////////////////////////////////
  37.         ////////////////////////////////////////////////////////////
  38.         public SettingsPropertyCollection()
  39.         {
  40.             _Hashtable = new Hashtable(10, CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default);
  41.         }
  42.        
  43.         ////////////////////////////////////////////////////////////
  44.         ////////////////////////////////////////////////////////////
  45.         public void Add(SettingsProperty property)
  46.         {
  47.             if (_ReadOnly)
  48.                 throw new NotSupportedException();
  49.            
  50.             OnAdd(property);
  51.             _Hashtable.Add(property.Name, property);
  52.             try {
  53.                 OnAddComplete(property);
  54.             }
  55.             catch {
  56.                 _Hashtable.Remove(property.Name);
  57.                 throw;
  58.             }
  59.         }
  60.        
  61.         ////////////////////////////////////////////////////////////
  62.         ////////////////////////////////////////////////////////////
  63.         public void Remove(string name)
  64.         {
  65.             if (_ReadOnly)
  66.                 throw new NotSupportedException();
  67.             SettingsProperty toRemove = (SettingsProperty)_Hashtable[name];
  68.             if (toRemove == null)
  69.                 return;
  70.             OnRemove(toRemove);
  71.             _Hashtable.Remove(name);
  72.             try {
  73.                 OnRemoveComplete(toRemove);
  74.             }
  75.             catch {
  76.                 _Hashtable.Add(name, toRemove);
  77.                 throw;
  78.             }
  79.            
  80.         }
  81.        
  82.         ////////////////////////////////////////////////////////////
  83.         ////////////////////////////////////////////////////////////
  84.         public SettingsProperty this[string name]
  85.         {
  86.             get { return _Hashtable[name] as SettingsProperty; }
  87.         }
  88.        
  89.         ////////////////////////////////////////////////////////////
  90.         ////////////////////////////////////////////////////////////
  91.         public IEnumerator GetEnumerator()
  92.         {
  93.             return _Hashtable.Values.GetEnumerator();
  94.         }
  95.        
  96.         ////////////////////////////////////////////////////////////
  97.         ////////////////////////////////////////////////////////////
  98.         public object Clone()
  99.         {
  100.             return new SettingsPropertyCollection(_Hashtable);
  101.         }
  102.        
  103.         ////////////////////////////////////////////////////////////
  104.         ////////////////////////////////////////////////////////////
  105.         public void SetReadOnly()
  106.         {
  107.             if (_ReadOnly)
  108.                 return;
  109.             _ReadOnly = true;
  110.         }
  111.        
  112.         ////////////////////////////////////////////////////////////
  113.         ////////////////////////////////////////////////////////////
  114.         public void Clear()
  115.         {
  116.             if (_ReadOnly)
  117.                 throw new NotSupportedException();
  118.             OnClear();
  119.             _Hashtable.Clear();
  120.             OnClearComplete();
  121.         }
  122.        
  123.        
  124.         ////////////////////////////////////////////////////////////
  125.         ////////////////////////////////////////////////////////////
  126.         // On* Methods for deriving classes to override. These have
  127.         // been modeled after the CollectionBase class but have
  128.         // been stripped of their "index" parameters as there is no
  129.         // visible index to this collection.
  130.        
  131.         protected virtual void OnAdd(SettingsProperty property)
  132.         {
  133.         }
  134.        
  135.         protected virtual void OnAddComplete(SettingsProperty property)
  136.         {
  137.         }
  138.        
  139.         protected virtual void OnClear()
  140.         {
  141.         }
  142.        
  143.         protected virtual void OnClearComplete()
  144.         {
  145.         }
  146.        
  147.         protected virtual void OnRemove(SettingsProperty property)
  148.         {
  149.         }
  150.        
  151.         protected virtual void OnRemoveComplete(SettingsProperty property)
  152.         {
  153.         }
  154.        
  155.        
  156.         ////////////////////////////////////////////////////////////
  157.         ////////////////////////////////////////////////////////////
  158.         // ICollection interface
  159.         public int Count {
  160.             get { return _Hashtable.Count; }
  161.         }
  162.         public bool IsSynchronized {
  163.             get { return false; }
  164.         }
  165.         public object SyncRoot {
  166.             get { return this; }
  167.         }
  168.        
  169.         public void CopyTo(Array array, int index)
  170.         {
  171.             _Hashtable.Values.CopyTo(array, index);
  172.         }
  173.        
  174.         /////////////////////////////////////////////////////////////////////////////
  175.         /////////////////////////////////////////////////////////////////////////////
  176.         private SettingsPropertyCollection(Hashtable h)
  177.         {
  178.             _Hashtable = (Hashtable)h.Clone();
  179.         }
  180.     }
  181. }

Developer Fusion