lunedì 17 dicembre 2012

ICOMPARER


IComparer

Andiamo ad analizzare due interfacce: IComparer e IComparable.

Queste interfacce sono spesso utilizzate insieme e anche se le interfacce sono simili e hanno nomi simili, gli scopi che essi servono sono leggermente diversi.

In generale, se si dispone di una matrice di tipi (ad esempio la stringa o i tipi integer ) che già supportano IComparer, è possibile ordinare la matrice senza fornire alcun riferimento esplicito a IComparer. In questo caso, gli elementi della matrice vengono proiettati per l’implementazione predefinita di IComparer(Comparer.Default) per l’utente.

Tuttavia, se desidera eseguire l'ordinamento e per confrontare gli oggetti personalizzati, è necessario implementare una o entrambe queste interfacce.
 
1.Un oggetto che implementa IComparable comunica implicitamente al .NET Framework che può essere confrontato con altri oggetti, stabilendo se uno di essi è maggiore, minore o uguale all'altro e abilitando in questo modo l'ordinamento automatico attraverso il metodo Sort di una collection. Infatti, tale metodo confronta uno ad uno ogni elemento di una collezione o di un array e tramite la funzione CompareTo che ogni interfaccia IComparable espone e li ordina in ordine crescente o decrescente. CompareTo è una funzione di istanza che implementa IComparable. CompareTo e ha dei risultati predefiniti:

·                     restituisce 1 se l'oggetto passato come parametro è minore dell'oggetto dalla quale viene richiamata;

·                    0 se è uguale e -1 se è maggiore.

2. IComparer  rappresenta un oggetto che deve eseguire la comparazione tra due altri oggetti, facendo quindi da tramite nell'ordinamento. Dato che Sort accetta in una delle sue versioni un oggetto IComparer, è possibile ordinare una lista di elementi con qualsiasi criterio si voglia semplicemente cambiando il parametro.
Usando questo meccanismo è possibile ordinare qualsiasi tipo di lista o collezione (tranne SortedList, che si ordina automaticamente), in modo semplice e veloce, particolarmente utile nell'ambito delle liste visuali a colonne.

ESEMPIO
link: http://martinaroma.blogspot.it/p/esercizi.html


Nessun commento:

Posta un commento