Você está offline; aguardando reconexão

Como usar as interfaces IComparable e IComparer em translation from VPE for Csharp Visual

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 320727
Para obter uma Visual Basic .NET versão deste artigo, consulte 322025.

NESTA TAREFA

Sumário
Este artigo passo a passo descreve o uso de duas interfaces: IComparer e IComparable . Essas interfaces são discutidas em mesmo artigo por dois motivos. Essas interfaces com freqüência são usadas juntos, e embora as interfaces são semelhantes (e tenham nomes semelhantes), eles servem a finalidades diferentes.

Se você tiver uma matriz de tipos (como string ou integer ) que já oferecem suporte a IComparer , você pode classificar essa matriz sem fornecer qualquer referência explícita à IComparer . Nesse caso, os elementos da matriz são converter para a implementação padrão de IComparer ( Comparer.Default ) para você. No entanto, se você desejar fornecer capacidade de classificação ou comparação para os objetos personalizados, você deve implementar uma ou ambas essas interfaces.

O namespace do .NET Framework Class Library seguinte é mencionado neste artigo:
System.Collections
back to the top

IComparable

A função de IComparable é fornecer um método de comparação de dois objetos de um tipo específico. Isso é necessário se você desejar fornecer qualquer recurso pedido para seu objeto. Pense IComparable como fornecer uma ordem de classificação padrão para os objetos. Por exemplo, se você tiver uma matriz de objetos do seu tipo, e você chamar o método Sort nessa matriz, IComparable fornecerá a comparação de objetos durante a classificação. Quando você implementa a interface IComparable , você deve implementar o método CompareTo , da seguinte maneira:
// Implement IComparable CompareTo method - provide default sort order.int IComparable.CompareTo(object obj){   car c=(car)obj;   return String.Compare(this.make,c.make);}				
a comparação no método é diferente dependendo do tipo dados do valor que está sendo comparado. String.Compare é usado neste exemplo porque a propriedade que é escolhida para a comparação é uma seqüência de caracteres.

back to the top

IComparer

A função de IComparer é fornecer mecanismos de comparação adicionais. Por exemplo, convém fornecer a ordem de sua classe em vários campos ou propriedades, ordem crescente ou decrescente no mesmo campo ou em ambos.

Usar IComparer é um processo de duas etapas. Primeiro, declara uma classe que implementa IComparer e, em seguida, implementar o 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;   }}				
Observação que o método IComparer.Compare requer comparação terciário. 1, 0 ou-1 é retornada dependendo se um valor for maior que, igual ou menor que o outro. Pode ser alterado a ordem de classificação (crescente ou decrescente), alternando os operadores lógicos neste método.

A segunda etapa é declarar um método que retorna uma instância do seu objeto IComparer :
public static IComparer sortYearAscending(){         return (IComparer) new sortYearAscendingHelper();}				
neste exemplo, o objeto é usado como o segundo argumento ao chamar o método Array.Sort sobrecarregado que aceita IComparer . O uso de IComparer não é limitado a matrizes. Ele é aceito como um argumento em um número de coleção diferente e classes de controle.

back to the top

Exemplo passo a passo

O exemplo a seguir demonstra o uso dessas interfaces. Para demonstrar IComparer e IComparable , uma classe chamada carro é criada. O objeto de carro tem as propriedades de fazer e ano . Uma classificação crescente para fazer o campo está ativado por meio de interface IComparable e uma classificação decrescente em que campo será habilitado por meio da interface IComparer . Tanto crescente e decrescente Classifica são fornecidos para a propriedade ano através do uso de IComparer .
  1. No Visual translation from VPE for Csharp, crie um novo projeto Console Application. Nome do aplicativo ConsoleEnum.
  2. Renomeie Program.cs como Host.cs e substitua o código com o código a seguir.

    Observação No Visual Studio .NET 2003, renomeie Class1.cs como Host.cs.
    using System;namespace ConsoleEnum{   class host   {      [STAThread]      static void Main(string[] args)      {         // Create an arary of car objects.               car[] arrayOfCars= new car[6]         {            new car("Ford",1992),            new car("Fiat",1988),            new car("Buick",1932),            new car("Ford",1932),            new car("Dodge",1999),            new car("Honda",1977)         };               // Write out a header for the output.         Console.WriteLine("Array - Unsorted\n");         foreach(car c in arrayOfCars)            Console.WriteLine(c.Make + "\t\t" + c.Year);               // Demo IComparable by sorting array with "default" sort order.         Array.Sort(arrayOfCars);         Console.WriteLine("\nArray - Sorted by Make (Ascending - IComparable)\n");         foreach(car c in arrayOfCars)            Console.WriteLine(c.Make + "\t\t" + c.Year);         // Demo ascending sort of numeric value with IComparer.         Array.Sort(arrayOfCars,car.sortYearAscending());         Console.WriteLine("\nArray - Sorted by Year (Ascending - IComparer)\n");         foreach(car c in arrayOfCars)            Console.WriteLine(c.Make + "\t\t" + c.Year);         // Demo descending sort of string value with IComparer.         Array.Sort(arrayOfCars,car.sortMakeDescending());         Console.WriteLine("\nArray - Sorted by Make (Descending - IComparer)\n");         foreach(car c in arrayOfCars)            Console.WriteLine(c.Make + "\t\t" + c.Year);         // Demo descending sort of numeric value using IComparer.         Array.Sort(arrayOfCars,car.sortYearDescending());         Console.WriteLine("\nArray - Sorted by Year (Descending - IComparer)\n");         foreach(car c in arrayOfCars)            Console.WriteLine(c.Make + "\t\t" + c.Year);              Console.ReadLine();      }   }}					
  3. Adicione uma classe para o projeto. Nome da classe carro .
  4. Substitua o código no Car.cs com o seguinte:
    using System;using System.Collections;namespace ConsoleEnum{      public class car : IComparable   {            // Beginning of nested classes.      // Nested class to do ascending sort on year property.      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;         }      }      // Nested class to do descending sort on year property.      private class sortYearDescendingHelper: 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;         }      }      // Nested class to do descending sort on make property.      private class sortMakeDescendingHelper: IComparer      {         int IComparer.Compare(object a, object b)         {            car c1=(car)a;            car c2=(car)b;             return String.Compare(c2.make,c1.make);         }      }      // End of nested classes.      private int year;      private string make;              public car(string Make,int Year)      {         make=Make;         year=Year;      }      public int Year      {         get  {return year;}         set {year=value;}      }      public string Make      {         get {return make;}         set {make=value;}      }      // Implement IComparable CompareTo to provide default sort order.      int IComparable.CompareTo(object obj)      {         car c=(car)obj;         return String.Compare(this.make,c.make);      }      // Method to return IComparer object for sort helper.      public static IComparer sortYearAscending()      {               return (IComparer) new sortYearAscendingHelper();      }      // Method to return IComparer object for sort helper.      public static IComparer sortYearDescending()      {               return (IComparer) new sortYearDescendingHelper();      }      // Method to return IComparer object for sort helper.      public static IComparer sortMakeDescending()      {              return (IComparer) new sortMakeDescendingHelper();      }   }}					
  5. Execute o projeto. A seguinte saída aparecerá na janela Console:
    Array - UnsortedFord            1992Fiat            1988Buick           1932Ford            1932Dodge           1999Honda           1977Array - Sorted by Make (Ascending - IComparable)Buick           1932Dodge           1999Fiat            1988Ford            1932Ford            1992Honda           1977Array - Sorted by Year (Ascending - IComparer)Ford            1932Buick           1932Honda           1977Fiat            1988Ford            1992Dodge           1999Array - Sorted by Make (Descending - IComparer)Honda           1977Ford            1932Ford            1992Fiat            1988Dodge           1999Buick           1932Array - Sorted by Year (Descending - IComparer)Dodge           1999Ford            1992Fiat            1988Honda           1977Buick           1932Ford            1932					
back to the top

Propriedades

ID do Artigo: 320727 - Última Revisão: 07/30/2008 23:09:37 - Revisão: 3.1

Microsoft Visual C# 2008 Express Edition, Microsoft Visual C# 2005 Express Edition

  • kbmt kbsweptvs2008 kbhowtomaster KB320727 KbMtpt
Comentários
d"; document.getElementsByTagName("head")[0].appendChild(m);