May 17 2008
Interfaces IComparer e IComparable
As interfaces IComparer e IComparable muitas vezes confundem a cabeça dos novos programadores pelo fato de terem nomes parecidos. Entretanto, é este nome complicado que facilita o entendimento de cada uma delas.
- Interface IComparer
Qualquer classe que implemente IComparer pode ser chamada de “comparadora” (comparer), ou seja, uma classe que pode fazer comparações entre dois objetos. Portanto, nada mais lógico do que esta interface definir um método chamado Compare e que recebe dois objetos para serem comparados e retorna um inteiro com o resultado. Veja um exemplo:

Definição da classe Produto

Implementação da interface IComparer

Exemplo de utilização da classe que implementa IComparer
É claro que existem outras imeplementações mais otimizadas para os trechos de código acima, mas fiz questão de deixar explícita a lógica para facilitar o entendimento.
Na implementação da interface o retorno do método será -1 quando o valor do produto 1 for menor que o 2, 1 quando for maior e 0 (zero) quando os dois valores forem iguais.
Esta interface também possui uma implementação genérica, a IComparer<T>.
- Interface IComparable
Se uma classe que implementa IComparer é considerada “comparadora”, então uma classe que implementa IComparable pode ser considerada “comparável” (comparable).
O método definido pela interface IComparable é o CompareTo. Ele recebe um objeto por parâmetro e retorna um inteiro com o resultado da comparação. Veja um exemplo:

Implementação da interface IComparable

Exemplo de utilização da classe que implementa IComparable
Da mesma forma que no exemplo anterior, fiz questão de deixar explícita a lógica para facilitar o entendimento e, portanto, deve ficar claro que existem implementações mais otimizadas para esta situação.
A idéia neste exemplo é tão simples quanto a anterior: o retorno do método será -1 quando o valor do produto atual (this) for menor que o comparado, 1 quando for maior e 0 (zero) quando for igual.
Esta interface também possui uma implementação genérica, a IComparable<T>.
É isso ai!
Este post foi elaborado com base na explicação do Ray Hsieh no post IComparable vs IComparer do site byes.com. Gostei da abordagem dele.
E mais uma vez indico o livro Microsoft Visual C# 2005: Passo a passo, que aborda este e vários outros assuntos sobre C# e .NET.
Até +.






