İngilizce dilinde oku

Aracılığıyla paylaş


IComparable<T> Arabirim

Tanım

Bir değer türünün veya sınıfın örneklerini sıralamak veya sıralamak için türe özgü bir karşılaştırma yöntemi oluşturmak için uyguladığı genelleştirilmiş bir karşılaştırma yöntemini tanımlar.

C#
public interface IComparable<in T>
C#
public interface IComparable<T>

Tür Parametreleri

T

Karşılaştıracak nesnenin türü.

Bu genel tür parametresi kontravaryanttır. Bu, kendi belirttiğiniz türü veya daha az türetilmiş başka bir türü kullanabileceğiniz anlamına gelir. Kovaryans ve kontravaryans hakkında daha fazla bilgi için bkz. Genel Türlerde Kovaryans ve Kontravaryans.
Türetilmiş

Örnekler

Aşağıdaki örnek, basit Temperature bir nesne için uygulamasını IComparable<T> göstermektedir. Örnek, nesne anahtarlarıyla Temperature bir SortedList<TKey,TValue> dize koleksiyonu oluşturur ve sıra dışı olarak listeye birkaç sıcaklık ve dize çifti ekler. yöntemi çağrısında AddSortedList<TKey,TValue> koleksiyon, daha sonra sıcaklığı artırmaya göre görüntülenen liste girdilerini sıralamak için uygulamasını kullanır IComparable<T> .

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

public class Temperature : IComparable<Temperature>
{
    // Implement the generic CompareTo method with the Temperature
    // class as the Type parameter.
    //
    public int CompareTo(Temperature other)
    {
        // If other is not a valid object reference, this instance is greater.
        if (other == null) return 1;

        // The temperature comparison depends on the comparison of
        // the underlying Double values.
        return m_value.CompareTo(other.m_value);
    }

    // Define the is greater than operator.
    public static bool operator >  (Temperature operand1, Temperature operand2)
    {
       return operand1.CompareTo(operand2) > 0;
    }

    // Define the is less than operator.
    public static bool operator <  (Temperature operand1, Temperature operand2)
    {
       return operand1.CompareTo(operand2) < 0;
    }

    // Define the is greater than or equal to operator.
    public static bool operator >=  (Temperature operand1, Temperature operand2)
    {
       return operand1.CompareTo(operand2) >= 0;
    }

    // Define the is less than or equal to operator.
    public static bool operator <=  (Temperature operand1, Temperature operand2)
    {
       return operand1.CompareTo(operand2) <= 0;
    }

    // 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 kelvins)
    {
        this.Kelvin = kelvins;
    }
}

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 example displays 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.
*/

Açıklamalar

Bu arabirim, değerleri sıralanabilir veya sıralanabilir türler tarafından uygulanır ve genel bir koleksiyon nesnesinin üyelerini sıralamak için kesin olarak belirlenmiş bir karşılaştırma yöntemi sağlar. Örneğin, bir sayı ikinci bir sayıdan büyük olabilir ve bir dize diğerinden önce alfabetik sırada görüntülenebilir. Türlerin uygulanmasının, CompareTo(T)geçerli örneğin sıralama düzenindeki konumunun önce mi, sonra mı yoksa aynı türde ikinci bir nesneyle aynı mı olduğunu belirten tek bir yöntemi tanımlamasını gerektirir. Genellikle, yöntem doğrudan geliştirici kodundan çağrılır. Bunun yerine, ve Addgibi yöntemler tarafından otomatik olarak List<T>.Sort() çağrılır.

Genellikle, bir IComparable<T> uygulama sağlayan türler de arabirimini IEquatable<T> uygular. IEquatable<T> arabirimi, uygulama türünün örneklerinin eşitliğini belirleyen yöntemini tanımlarEquals.

yönteminin CompareTo(T) uygulanması, aşağıdaki tabloda gösterildiği gibi üç değerden birine sahip bir Int32 döndürmelidir.

Değer Anlamı
Sıfırdan küçük Bu nesne, sıralama düzeninde CompareTo yöntemi tarafından belirtilen nesnenin önündedir.
Sıfır Bu geçerli örnek, sıralama düzeninde yöntem bağımsız değişkeni tarafından belirtilen nesneyle CompareTo aynı konumda yer alır.
Sıfırdan büyük Bu geçerli örnek, sıralama düzeninde CompareTo yöntem bağımsız değişkeni tarafından belirtilen nesneyi izler.

Tüm sayısal türler (ve gibi Int32Double) , , ve DateTimegibi CharStringuygularIComparable<T>. Özel türler ayrıca nesne örneklerinin IComparable<T> sıralanması veya sıralanması için kendi uygulamalarını sağlamalıdır.

Uygulayanlara Notlar

Arabirimin type parametresini IComparable<T> bu arabirimi uygulayan türle değiştirin.

uygularsanızIComparable<T>, ile CompareTo(T)tutarlı değerler döndürmek için , op_GreaterThanOrEqual, op_LessThanve op_LessThanOrEqual işleçlerini aşırı yüklemelisinizop_GreaterThan. Ayrıca uygulamanız gerekir IEquatable<T>. Tam bilgi için makaleye IEquatable<T> bakın.

Yöntemler

CompareTo(T)

Mevcut örneği aynı türdeki başka bir nesne ile karşılaştırır ve geçerli örneğin, diğer nesneyle aynı sıralama düzeni konumunda mı olduğunu, önünde mi olduğunu, yoksa arkasında mı olduğunu belirten bir tamsayı döndürür.

Şunlara uygulanır

Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Ayrıca bkz.