IEquatable<T> Interfész

Definíció

Meghatároz egy általánosított metódust, amelyet egy értéktípus vagy osztály implementál a példányok egyenlőségének meghatározására szolgáló típusspecifikus metódus létrehozásához.

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)

Típusparaméterek

T

Az összehasonlítandó objektumok típusa.

Származtatott

Példák

Az alábbi példa egy Person olyan osztály részleges implementálását mutatja be, amely IEquatable<T> két tulajdonsággal rendelkezik, LastName és NationalIda . NationalIdegyedi azonosítónak minősül, ezért a Equals metódus akkor ad vissza, True ha NationalId két Person objektum tulajdonsága megegyezik, ellenkező esetben pedig .False (Vegye figyelembe, hogy az F# példa nem kezeli null a példányok értékeit Person .)

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

Megjegyzések

Ezt az interfészt olyan típusok implementálják, amelyek értékei egyenlők lehetnek (például numerikus és sztringosztályok). Az értéktípus vagy -osztály egy olyan típusspecifikus metódus létrehozására implementálja a Equals metódust, amely alkalmas a példányok egyenlőségének meghatározására.

Note

Az IComparable<T> interfész határozza meg a CompareTo metódust, amely meghatározza a implementálási típus példányainak rendezési sorrendjét. Az IEquatable<T> interfész határozza meg a Equals metódust, amely meghatározza a implementálási típus példányainak egyenlőségét.

Az IEquatable<T> interfészt olyan általános gyűjteményobjektumok használják, mint Dictionary<TKey,TValue>például a , List<T>, és LinkedList<T> amikor az egyenlőséget tesztelik olyan metódusokban, mint a Contains, IndexOf, LastIndexOfés Remove. Minden olyan objektumhoz implementálandó, amely egy általános gyűjteményben tárolható.

A felület implementálásával IEquatable<T> kapcsolatos további információkért lásd a IEquatable<T>.Equals metódussal kapcsolatos megjegyzéseket.

Megjegyzések az implementálókhoz

Cserélje le az illesztő típusparaméterét IEquatable<T> az illesztőt megvalósító típusra.

Ha implementálja IEquatable<T>, felül kell bírálnia az alaposztály implementációit Equals(Object) is, így GetHashCode() azok viselkedése összhangban van a Equals(T) módszerével. Felülbírálás Equals(Object)esetén a rendszer meghívja a felülírt implementációt az osztály statikus Equals(System.Object, System.Object) metódusára irányuló hívásokban is. Emellett túl kell terhelnie az és op_Equality az op_Inequality operátorokat. Ez biztosítja, hogy az egyenlőség minden tesztje egységes eredményeket eredményez.

A felülírással Equals(Object)kapcsolatos információkért lásd: Equals(Object).

Értéktípus esetén mindig implementálnia IEquatable<T> kell és felül kell bírálnia Equals(Object) a jobb teljesítmény érdekében. Equals(Object) értéktípusokat jelöl meg, és az egyenlőség két értékének összehasonlítására támaszkodik. Mind a megvalósítás, Equals(T) mind a felülbírálás Equals(Object) konzisztens eredményeket ad vissza.

Implementálás IEquatable<T>esetén azt is implementálnia IComparable<T> kell, hogy a típuspéldányok rendezhetők vagy rendezhetők-e. Ha a típus implementál IComparable<T>, szinte mindig implementálhatja IEquatable<T>is.

Vegye figyelembe, hogy vannak olyan kialakítások, amelyekben egy típus támogatja a rendelési relációt, de az egyenlőség eltérhet a rendezési relációtól. Fontolja meg azt az osztályt Person , amelyben betűrendbe rendez. Két azonos nevű személy azonos, de nem ugyanaz a személy.

Metódusok

Name Description
Equals(T)

Azt jelzi, hogy az aktuális objektum egyenlő-e egy másik, azonos típusú objektummal.

A következőre érvényes:

Lásd még