Evaluar y enviar comentarios

  Encender vista de ancho de banda bajo
Esta página es específica de
Microsoft Visual Studio 2008/.NET Framework 3.5

Hay además otras versiones disponibles para:
Biblioteca de clases de .NET Framework
IComparable<(Of <(T>)>) (Interfaz)

Actualización: noviembre 2007

Define un método de comparación generalizado, implementado por un tipo de valor o clase con el fin de crear un método de comparación específico del tipo para ordenar instancias.

Espacio de nombres:  System
Ensamblado:  mscorlib (en mscorlib.dll)
Visual Basic (Declaración)
Public Interface IComparable(Of T)
Visual Basic (Uso)
Dim instance As IComparable(Of T)
C#
public interface IComparable<T>
Visual C++
generic<typename T>
public interface class IComparable
J#
J# admite el uso de APIs genéricas pero no admite la declaración de nuevas API.
JScript
JScript no admite el uso de métodos ni tipos genéricos.

Parámetros de tipo

T

Tipo de objetos que se van a comparar.

Esta interfaz la implementan tipos cuyos valores se pueden ordenar, como por ejemplo, las clases numéricas o de tipo cadena. Un tipo de valor o clase implementa el método CompareTo para crear un método de comparación específico del tipo adecuado a propósitos tales como la ordenación.

4d7sx9hd.alert_note(es-es,VS.90).gifNota:

La interfaz IComparable<(Of <(T>)>) define el método CompareTo, que determina el criterio de ordenación de instancias del tipo que se está implementando. La interfaz IEquatable<(Of <(T>)>) define el método Equals, que determina la igualdad de instancias del tipo que se está implementando.

La interfaz IComparable<(Of <(T>)>) proporciona un método de comparación con establecimiento inflexible de tipos para ordenar los miembros de un objeto de colección genérico. Debido a ello, no suele llamarse directamente a esta interfaz desde el código del desarrollador. En lugar de ello, métodos como List<(Of <(T>)>)..::.Sort()()() y Add llaman automáticamente a esta interfaz.

Notas para los implementadores:

Reemplace el parámetro de tipo de la interfaz IComparable<(Of <(T>)>) con el tipo que esté implementando esta interfaz.

En el ejemplo de código siguiente se muestra la implementación de IComparable para un objeto Temperature sencillo. En el ejemplo se crea una colección SortedList<(Of <(TKey, TValue>)>) de cadenas con claves de objetos Temperature y se agregan varios pares de temperaturas y cadenas a la lista sin seguir una secuencia. En la llamada al método Add, la colección SortedList<(Of <(TKey, TValue>)>) usa la implementación de IComparable<(Of <(T>)>) para ordenar las entradas de la lista, que se muestran a continuación siguiendo un orden ascendente de temperatura.

Visual Basic
Imports System
Imports System.Collections.Generic

Public Class Temperature
    Implements IComparable(Of Temperature)

    ' Implement the generic CompareTo method. In the Implements statement,
    ' specify the Temperature class for the type parameter of the
    ' generic IComparable interface. Use that type for the parameter
    ' of the CompareTo method.
    '
    Public Overloads Function CompareTo(ByVal other As Temperature) As Integer _
        Implements IComparable(Of Temperature).CompareTo

        ' The temperature comparison depends on the comparison of the
        ' the underlying Double values. Because the CompareTo method is
        ' strongly typed, it is not necessary to test for the correct
        ' object type.
        Return m_value.CompareTo(other.m_value)
    End Function

    ' The underlying temperature value.
    Protected m_value As Double = 0.0

    Public ReadOnly Property Celsius() As Double
        Get
            Return m_value - 273.15
        End Get
    End Property

    Public Property Kelvin() As Double
        Get
            Return m_value
        End Get
        Set(ByVal Value As Double)
            If value < 0.0 Then 
                Throw New ArgumentException("Temperature cannot be less than absolute zero.")
            Else
                m_value = Value
            End If
        End Set
    End Property

    Public Sub New(ByVal degreesKelvin As Double)
        Me.Kelvin = degreesKelvin 
    End Sub
End Class

Public Class Example
    Public Shared Sub Main()
        Dim temps As New SortedList(Of Temperature, String)

        ' Add entries to the sorted list, out of order.
        temps.Add(New Temperature(2017.15), "Boiling point of Lead")
        temps.Add(New Temperature(0), "Absolute zero")
        temps.Add(New Temperature(273.15), "Freezing point of water")
        temps.Add(New Temperature(5100.15), "Boiling point of Carbon")
        temps.Add(New Temperature(373.15), "Boiling point of water")
        temps.Add(New Temperature(600.65), "Melting point of Lead")

        For Each kvp As KeyValuePair(Of Temperature, String) In temps
            Console.WriteLine("{0} is {1} degrees Celsius.", kvp.Value, kvp.Key.Celsius)
        Next
    End Sub
End Class

' This code example produces the following output:
'
'Absolute zero is -273.15 degrees Celsius.
'Freezing point of water is 0 degrees Celsius.
'Boiling point of water is 100 degrees Celsius.
'Melting point of Lead is 327.5 degrees Celsius.
'Boiling point of Lead is 1744 degrees Celsius.
'Boiling point of Carbon is 4827 degrees Celsius.
'

C#
using System;
using System.Collections.Generic;

public class Temperature : IComparable<Temperature>
{
    // Implement the CompareTo method. For the parameter type, Use 
    // the type specified for the type parameter of the generic 
    // IComparable interface. 
    //
    public int CompareTo(Temperature other)
    {
        // The temperature comparison depends on the comparison of the
        // the underlying Double values. Because the CompareTo method is
        // strongly typed, it is not necessary to test for the correct
        // object type.
        return m_value.CompareTo(other.m_value);
    }

    // The underlying temperature value.
    protected double m_value = 0.0;

    public double Celsius    
    {
        get
        {
            return m_value - 273.15;
        }
    }

    public double Kelvin    
    {
        get
        {
            return m_value;
        }
        set
        {
            if (value < 0.0)
            {
                throw new ArgumentException("Temperature cannot be less than absolute zero.");
            }
            else
            {
                m_value = value;
            }
        }
    }

    public Temperature(double degreesKelvin)
    {
        this.Kelvin = degreesKelvin;
    }
}

public class Example
{
    public static void Main()
    {
        SortedList<Temperature, string> temps = 
            new SortedList<Temperature, string>();

        // Add entries to the sorted list, out of order.
        temps.Add(new Temperature(2017.15), "Boiling point of Lead");
        temps.Add(new Temperature(0), "Absolute zero");
        temps.Add(new Temperature(273.15), "Freezing point of water");
        temps.Add(new Temperature(5100.15), "Boiling point of Carbon");
        temps.Add(new Temperature(373.15), "Boiling point of water");
        temps.Add(new Temperature(600.65), "Melting point of Lead");

        foreach( KeyValuePair<Temperature, string> kvp in temps )
        {
            Console.WriteLine("{0} is {1} degrees Celsius.", kvp.Value, kvp.Key.Celsius);
        }
    }
}

/* This code example produces the following output:

Absolute zero is -273.15 degrees Celsius.
Freezing point of water is 0 degrees Celsius.
Boiling point of water is 100 degrees Celsius.
Melting point of Lead is 327.5 degrees Celsius.
Boiling point of Lead is 1744 degrees Celsius.
Boiling point of Carbon is 4827 degrees Celsius.

*/

Visual C++
#using <System.dll>

using namespace System;
using namespace System::Collections::Generic;

public ref class Temperature: public IComparable<Temperature^> {

protected:
   // The value holder
   Double m_value;

public:
   // Implement the CompareTo method. For the parameter type, Use 
   // the type specified for the type parameter of the generic 
   // IComparable interface. 
   //
   virtual Int32 CompareTo( Temperature^ other ) {

      // The temperature comparison depends on the comparison of the
      // the underlying Double values. Because the CompareTo method is
      // strongly typed, it is not necessary to test for the correct
      // object type.
      return m_value.CompareTo( other->m_value );
   }

   property Double Celsius {
      Double get() {
         return m_value + 273.15;
      }
   }

   property Double Kelvin {
      Double get() {
         return m_value;
      }
      void set( Double value ) {
         if (value < 0)
            throw gcnew ArgumentException("Temperature cannot be less than absolute zero.");
         else
            m_value = value;
      }
   }

   Temperature(Double degreesKelvin) {
      this->Kelvin = degreesKelvin;
   }
};

int main() {
   SortedList<Temperature^, String^>^ temps = 
      gcnew SortedList<Temperature^, String^>();

   // Add entries to the sorted list, out of order.
   temps->Add(gcnew Temperature(2017.15), "Boiling point of Lead");
   temps->Add(gcnew Temperature(0), "Absolute zero");
   temps->Add(gcnew Temperature(273.15), "Freezing point of water");
   temps->Add(gcnew Temperature(5100.15), "Boiling point of Carbon");
   temps->Add(gcnew Temperature(373.15), "Boiling point of water");
   temps->Add(gcnew Temperature(600.65), "Melting point of Lead");

   for each( KeyValuePair<Temperature^, String^>^ kvp in temps )
   {
      Console::WriteLine("{0} is {1} degrees Celsius.", kvp->Value, kvp->Key->Celsius);
   }
}

/* This code example productes the following output:

Absolute zero is 273.15 degrees Celsius.
Freezing point of water is 546.3 degrees Celsius.
Boiling point of water is 646.3 degrees Celsius.
Melting point of Lead is 873.8 degrees Celsius.
Boiling point of Lead is 2290.3 degrees Celsius.
Boiling point of Carbon is 5373.3 degrees Celsius.

*/

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 para Smartphone, Windows Mobile para Pocket PC, Xbox 360

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0

.NET Compact Framework

Compatible con: 3.5, 2.0

XNA Framework

Compatible con: 2.0, 1.0
Contenido de la comunidad   ¿Qué es Community Content?
Agregar contenido nuevo RSS  Anotaciones
Processing
© 2009 Microsoft Corporation. Reservados todos los derechos. Términos de uso  |  Marcas Registradas  |  Privacidad
Page view tracker