Ho una classe contenitore simile a quella sottostante (con molta della logica omessa):
class Container<T>
{
Dictionary<T, TWrapped> contains = new Dictionary<T, TWrapper>();
public void Add(T item)
{
TWrapped wrappedItem = new TWrapped(item);
contains[item] = wrappedItem;
// logic involving wrappedItem...
}
public bool Contains(T item)
{
return contains.ContainsKey(item);
}
// Item has been updated, so Sort called on container
public void Sort(T item)
{
TWrapped wrappedItem;
if(contains.TryGetValue(item, out wrappedItem))
{
// sort the wrappedItem within the container...
}
}
}
C'è un modo per dire agli utenti di Container che T verrà usato come chiave di dizionario o, in modo equivalente, di forzare gli utenti ad avere GetHashCode () e Equals () sovrascritti?
Altre informazioni
La mia attuale classe contenitore implementa un heap implicitamente con un array. Per fare ciò, gli articoli sono avvolti con una classe che contiene informazioni sugli indici per trovare genitori e figli all'interno dell'array. Questa classe wrapper è privata all'interno dell'heap per evitare manomissioni involontarie dei valori dell'indice.
Ora desidero supportare il riordinamento di elementi specifici nell'heap; tuttavia, per mappare dall'elemento fornito dall'utente alla sua rappresentazione avvolta nell'array, ho bisogno di un dizionario per memorizzare tale mappatura ... da qui i guai GetHashCode () Equals ().
Qualsiasi critica al design sarebbe gradita!