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