Esporta (0) Stampa
Espandi tutto

Interfaccia IComparable

Aggiornamento: Luglio 2008

Definisce un metodo di confronto specifico del tipo generalizzato che viene implementato da una classe o un tipo valore per ordinarne le istanze.

Spazio dei nomi:  System
Assembly:  mscorlib (in mscorlib.dll)

[ComVisibleAttribute(true)]
public interface IComparable
/** @attribute ComVisibleAttribute(true) */
public interface IComparable
public interface IComparable

Questa interfaccia viene implementata da tipi i cui valori possono essere ordinati. Richiede che i suddetti tipi definiscano un unico metodo, CompareTo, il quale indica se la posizione dell'istanza corrente nell'ordinamento è precedente, successiva o uguale a quella di un secondo oggetto dello stesso tipo. L'implementazione di IComparable dell'istanza viene chiamata automaticamente da metodi quali Array.Sort e ArrayList.Sort.

Tutti i tipi numerici (quali ad esempio Int32 e Double) implementano IComparable, allo stesso modo di String, Char e DateTime. I tipi personalizzati devono inoltre fornire la propria implementazione di IComparable per consentire l'ordinamento delle istanze di oggetti.

Nell'esempio di codice riportato di seguito viene illustrata l'implementazione di IComparable e viene descritto il metodo CompareTo richiesto.

using System;
using System.Collections;

public class Temperature : IComparable 
{
    // The temperature value
    protected double temperatureF;

    public int CompareTo(object obj) {
        if(obj is Temperature) 
        {
            Temperature otherTemperature = (Temperature) obj;
            return this.temperatureF.CompareTo(otherTemperature.temperatureF);
        }
        else
        {
           throw new ArgumentException("Object is not a Temperature");
        }    
    }

    public double Fahrenheit 
    {
        get 
        {
            return this.temperatureF;
        }
        set {
            this.temperatureF = value;
        }
    }

    public double Celsius 
    {
        get 
        {
            return (this.temperatureF - 32) * (5/9);
        }
        set 
        {
            this.temperatureF = (value * 9/5) + 32;
        }
    }
}

public class CompareTemperatures
{
   public static void Main()
   {
      ArrayList temperatures = new ArrayList();
      // Initialize random number generator.
      Random rnd = new Random();

      // Generate 10 temperatures between 0 and 100 randomly.
      for (int ctr = 1; ctr <= 10; ctr++)
      {
         int degrees = rnd.Next(0, 100);
         Temperature temp = new Temperature();
         temp.Fahrenheit = degrees;
         temperatures.Add(temp);   
      }

      // Sort ArrayList.
      temperatures.Sort();

      foreach (Temperature temp in temperatures)
         Console.WriteLine(temp.Fahrenheit);

   }
}
// The example displays the following output to the console (individual
// values may vary because they are randomly generated):
//       2
//       7
//       16
//       17
//       31
//       37
//       58
//       66
//       72
//       95


Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition , Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile per Smartphone, Windows Mobile per Pocket PC, Xbox 360

.NET Framework e .NET Compact Framework non supportano tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

.NET Framework

Supportato in: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Supportato in: 3.5, 2.0, 1.0

XNA Framework

Supportato in: 2.0, 1.0

Date

Cronologia

Motivo

Luglio 2008

Aggiunti dettagli sull'utilizzo da Common Language Runtime e informazioni per gli implementatori.

Commenti e suggerimenti dei clienti.

Aggiunte alla community

AGGIUNGI
Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2014 Microsoft