May 17 2008

Interfaces IComparer e IComparable

Autor: Marcos Dell Antonio - Categorias: .NET

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:

Classe Produto
Definição da classe Produto

Implementação da interface IComparer
Implementação da interface IComparer

Exemplo de utilizaçã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
Implementação da interface IComparable

Exemplo de utilização da classe que implementa 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é +.

Adicione ao del.icio.us del.icio.us | Adicione ao Rec6 Rec6

Faça um comentário