Bagikan melalui


IEquatable<T> Antarmuka

Definisi

Menentukan metode umum yang diterapkan jenis nilai atau kelas untuk membuat metode khusus jenis untuk menentukan kesetaraan instans.

generic <typename T>
public interface class IEquatable
public interface IEquatable<T>
public interface IEquatable<T> where T : allows ref struct
type IEquatable<'T> = interface
Public Interface IEquatable(Of T)

Jenis parameter

T

Jenis objek yang akan dibandingkan.

Turunan

Contoh

Contoh berikut menunjukkan implementasi Person parsial IEquatable<T> kelas yang mengimplementasikan dan memiliki dua properti, LastName dan NationalId. NationalId dianggap sebagai pengidentifikasi unik, oleh karena itu Equals metode mengembalikan True jika NationalId properti dari dua Person objek identik; jika tidak, metode mengembalikan False. (Perhatikan bahwa contoh F# tidak menangani null nilai untuk Person instans.)

public class Person : IEquatable<Person>
{
    public Person(string lastName, string ssn)
    {
        LastName = lastName;
        NationalId = ssn;
    }

    public string LastName { get; }

    public string NationalId { get; }

    public bool Equals(Person? other) => other is not null && other.NationalId == NationalId;

    public override bool Equals(object? obj) => Equals(obj as Person);

    public override int GetHashCode() => NationalId.GetHashCode();

    public static bool operator ==(Person person1, Person person2)
    {
        if (person1 is null)
        {
            return person2 is null;
        }

        return person1.Equals(person2);
    }

    public static bool operator !=(Person person1, Person person2)
    {
        if (person1 is null)
        {
            return person2 is not null;
        }

        return !person1.Equals(person2);
    }
}
open System

type Person(lastName: string, nationalId: string) =
    member this.LastName = lastName
    member this.NationalId = nationalId

    interface IEquatable<Person> with
        member this.Equals(other: Person) =
            other.NationalId = this.NationalId

    override this.Equals(obj: obj) =
        match obj with
        | :? Person as person -> (this :> IEquatable<Person>).Equals(person)
        | _ -> false

    override this.GetHashCode() =
        this.NationalId.GetHashCode()

    static member (==) (person1: Person, person2: Person) =
        person1.Equals(person2)

    static member (!=) (person1: Person, person2: Person) =
        not (person1.Equals(person2))
Public Class Person
    Implements IEquatable(Of Person)

    Public Sub New(lastName As String, nationalId As String)
        Me.LastName = lastName
        Me.NationalId = nationalId
    End Sub

    Public ReadOnly Property LastName As String
    Public ReadOnly Property NationalId As String

    Public Overloads Function Equals(other As Person) As Boolean Implements IEquatable(Of Person).Equals
        Return other IsNot Nothing AndAlso other.NationalId = Me.NationalId
    End Function

    Public Overrides Function Equals(obj As Object) As Boolean
        Return Equals(TryCast(obj, Person))
    End Function

    Public Overrides Function GetHashCode() As Integer
        Return NationalId.GetHashCode()
    End Function

    Public Shared Operator =(person1 As Person, person2 As Person) As Boolean
        If person1 Is Nothing Then
            Return person2 Is Nothing
        End If
        Return person1.Equals(person2)
    End Operator

    Public Shared Operator <>(person1 As Person, person2 As Person) As Boolean
        If person1 Is Nothing Then
            Return person2 IsNot Nothing
        End If
        Return Not person1.Equals(person2)
    End Operator
End Class

Keterangan

Antarmuka ini diimplementasikan oleh jenis yang nilainya dapat disamakan (misalnya, kelas numerik dan string). Jenis nilai atau kelas mengimplementasikan Equals metode untuk membuat metode khusus jenis yang cocok untuk menentukan kesetaraan instans.

Nota

Antarmuka IComparable<T> mendefinisikan CompareTo metode , yang menentukan urutan sortir instans dari jenis penerapan. Antarmuka IEquatable<T> mendefinisikan Equals metode , yang menentukan kesetaraan instans dari jenis penerapan.

Antarmuka IEquatable<T> digunakan oleh objek koleksi generik seperti Dictionary<TKey,TValue>, , List<T>dan LinkedList<T> saat menguji kesetaraan dalam metode seperti Contains, , IndexOfLastIndexOf, dan Remove. Ini harus diimplementasikan untuk objek apa pun yang mungkin disimpan dalam koleksi generik.

Untuk informasi selengkapnya tentang menerapkan IEquatable<T> antarmuka, lihat komentar pada IEquatable<T>.Equals metode .

Catatan Bagi Implementer

Ganti parameter IEquatable<T> jenis antarmuka dengan jenis yang mengimplementasikan antarmuka ini.

Jika Anda menerapkan IEquatable<T>, Anda juga harus mengambil alih implementasi Equals(Object) kelas dasar dan GetHashCode() sehingga perilakunya konsisten dengan metode .Equals(T) Jika Anda mengambil alih Equals(Object), implementasi yang ditimpa juga dipanggil dalam panggilan ke metode statis Equals(System.Object, System.Object) di kelas Anda. Selain itu, Anda harus membebani op_Equality operator dan op_Inequality secara berlebihan. Ini memastikan bahwa semua pengujian untuk kesetaraan mengembalikan hasil yang konsisten.

Untuk informasi tentang penimpaan Equals(Object), lihat Equals(Object).

Untuk jenis nilai, Anda harus selalu menerapkan IEquatable<T> dan mengambil alih Equals(Object) untuk performa yang lebih baik. Equals(Object) kotak jenis nilai dan bergantung pada pantulan untuk membandingkan dua nilai untuk kesetaraan. Implementasi Equals(T) dan penimpaan Equals(Object) Anda harus mengembalikan hasil yang konsisten.

Jika Anda menerapkan IEquatable<T>, Anda juga harus menerapkan IComparable<T> jika instans jenis Anda dapat diurutkan atau diurutkan. Jika jenis Anda mengimplementasikan IComparable<T>, Anda hampir selalu juga menerapkan IEquatable<T>.

Perhatikan bahwa ada beberapa desain di mana jenis mendukung hubungan pesanan, tetapi kesetaraan mungkin berbeda dari hubungan pemesanan. Person Pertimbangkan kelas tempat Anda mengurutkan menurut abjad. Dua orang dengan nama yang sama mengurutkan sama, tetapi bukan orang yang sama.

Metode

Nama Deskripsi
Equals(T)

Menunjukkan apakah objek saat ini sama dengan objek lain dengan jenis yang sama.

Berlaku untuk

Lihat juga