IComparer
La
función de IComparer es
proporcionar mecanismos de comparación adicionales. Por ejemplo, puede desee
proporcionar la ordenación de la clase en varios campos o propiedades,
ascendente y descendente en el mismo campo, o en ambos.
El uso de IComparer es un proceso de
dos pasos. En primer lugar, declare una clase que implementa la interfaz
IComparery, a continuación, implemente el método Compare :
private class sortYearAscendingHelper : IComparer{
int IComparer.Compare(object a, object b)
{
car c1=(car)a;
car c2=(car)b;
if (c1.year > c2.year)
return 1;
if (c1.year < c2.year)
return -1;
else
return 0;
}
}
Observe
que el método IComparer.Compare requiere una comparación terciaria. 1, 0, -1 o se devuelve
en función de si un valor es mayor que, igual a, o menos que el otro. El
criterio de ordenación (ascendente o descendente) puede modificarse cambiando
los operadores lógicos en este método.
El segundo paso es declarar un método que devuelve una instancia del objeto IComparer :
public static IComparer sortYearAscending(){
return (IComparer) new sortYearAscendingHelper();
}
En
este ejemplo, el objeto se utiliza como segundo argumento cuando se llama al
método Array.Sort sobrecargado que acepta IComparer. El uso de IComparer no se limita a arrays. Se acepta como argumento en un
número de colección diferentes y las clases de control.
DEMOSTRACIÓN
En Visual Studio vamos a dar click en menú File à New à Project
Seleccionamos la opción
‘Console Application’ y colocamos como nombre ‘DemoApp IComparer’ y damo click
en el botón OK
Nótese que al igual que los
ejemplos anteriores,se agrega nuestro proyecto al navegador de soluciones
En el archivo ‘Program.cs’
del proyecto que acabamos de crear, le damos doble click en él, y procedemos a
escribir la clase Empleado (Arriba de la clase Program) y dentro de ella una
clase anidada que va a implementar una interface IComparer.
Debajo del método Main(),
Procedemos a crear una función de nombre IComparerTestingMethod() que contendrá
la siguientes líneas de código:
En el método Main() hacemos
el llamado a esa función:
Al ejecutar nuestra Demo
La salida del programa sería
la siguiente