using System.Collections.Generic; namespace Developpez.Dotnet.Collections { /// /// Classe de base pour implémenter des dictionnaires personnalisés, sans avoir à implémenter /// chaque méthode de IDictionary<K, V>. Toutes les méthodes et propriétés sont virtuelles, /// et délèguent leur implémentation à un IDictionary<K, V> passé en paramètre du constructeur /// protégé. /// /// Type de la clé /// Type de la valeur public abstract class DictionaryBase : IDictionary { private readonly IDictionary _dictionary; /// /// Initialise une nouvelle instance de DictionaryBase<TKey, TValue> qui délègue son implémentation /// au dictionaire passé en paramètre /// /// Le dictionnaire auquel déléguer l'implémentation protected DictionaryBase(IDictionary dictionary) : this(dictionary, false) { } /// /// Initialise une nouvelle instance de DictionaryBase<TKey, TValue> qui délègue son implémentation /// au dictionaire passé en paramètre, ou a une copie de ce dictionnaire /// /// Le dictionnaire auquel déléguer l'implémentation /// true pour réaliser une copie du dictionnaire original ; false pour simplement l'encapsuler protected DictionaryBase(IDictionary dictionary, bool copy) { dictionary.CheckArgumentNull("dictionary"); if (copy) _dictionary = new Dictionary(dictionary); else _dictionary = dictionary; } #region IDictionary Members /// /// Ajoute la clé et la valeur spécifiées au dictionnaire. /// /// Clé de l'élément à ajouter. /// Valeur de l'élément à ajouter. La valeur peut être null pour les types référence. public virtual void Add(TKey key, TValue value) { _dictionary.Add(key, value); } /// /// Détermine si le dictionnaire contient la clé spécifiée. /// /// Clé à rechercher /// true si le dictionnaire contient un élément correspondant à la clé spécifiée ; sinon, false. public virtual bool ContainsKey(TKey key) { return _dictionary.ContainsKey(key); } /// /// Obtient une collection contenant les clés du dictionnaire. /// public virtual ICollection Keys { get { return _dictionary.Keys; } } /// /// Supprime du dictionnaire la valeur ayant la clé spécifiée. /// /// Clé de l'élément à supprimer. /// true si la recherche et la suppression de l'élément réussissent ; sinon, false. public virtual bool Remove(TKey key) { return _dictionary.Remove(key); } /// /// Obtient la valeur associée à la clé spécifiée. /// /// Clé de la valeur à obtenir. /// Paramètre de sortie auquel est affecté la valeur trouvée /// true si le dictionnaire contient un élément correspondant à la clé spécifiée ; sinon, false. public virtual bool TryGetValue(TKey key, out TValue value) { return _dictionary.TryGetValue(key, out value); } /// /// Obtient une collection contenant les valeurs du dictionnaire. /// public virtual ICollection Values { get { return _dictionary.Values; } } /// /// Obtient ou définit la valeur associée à la clé spécifiée. /// /// Clé de l'élément à obtenir ou à définir /// Valeur associée à la clé spécifiée. Si la clé spécifiée est introuvable, une opération Get retourne KeyNotFoundException et une opération Set crée un nouvel élément avec la clé spécifiée. public virtual TValue this[TKey key] { get { return _dictionary[key]; } set { _dictionary[key] = value; } } #endregion #region ICollection> Members /// /// Ajoute la paire clé/valeur spécifiée au dictionnaire /// /// Paire clé/valeur à ajouter public virtual void Add(KeyValuePair item) { _dictionary.Add(item); } /// /// Supprime toutes les clés et les valeurs du dictionnaire. /// public virtual void Clear() { _dictionary.Clear(); } /// /// Détermine si le dictionnaire contient la paire clé/valeur spécifiée. /// /// Paire clé/valeur recherchée /// true si le dictionnaire contient la paire clé/valeur, false sinon public virtual bool Contains(KeyValuePair item) { return _dictionary.Contains(item); } /// /// Copie les éléments du dictionnaire dans un tableau, à partir de la position spécifiée /// /// Tableau de destination /// Index du tableau où commencer la copie public virtual void CopyTo(KeyValuePair[] array, int arrayIndex) { _dictionary.CopyTo(array, arrayIndex); } /// /// Obtient le nombre de paires clé/valeur contenues dans le dictionnaire. /// public virtual int Count { get { return _dictionary.Count; } } /// /// Obtient une valeur indiquant si le dictionnaire est en lecture seule. /// public virtual bool IsReadOnly { get { return _dictionary.IsReadOnly; } } /// /// Supprime du dictionnaire la paire clé/valeur spécifiée. /// /// Paire clé/valeur /// true si la recherche et la suppression de l'élément réussissent ; sinon, false. public virtual bool Remove(KeyValuePair item) { return _dictionary.Remove(item); } #endregion #region IEnumerable> Members /// /// Retourne un énumérateur qui parcourt le dictionnaire /// /// Un énumerateur pour parcourir le dictionnaire public virtual IEnumerator> GetEnumerator() { return _dictionary.GetEnumerator(); } #endregion #region IEnumerable Members /// /// Retourne un énumérateur qui parcourt le dictionnaire /// /// Un énumerateur pour parcourir le dictionnaire System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return this.GetEnumerator(); } #endregion } }