IEquatable<T> Interface
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Definieert een gegeneraliseerde methode die door een waardetype of klasse wordt geïmplementeerd om een typespecifieke methode te maken voor het bepalen van gelijkheid van instanties.
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)
Type parameters
- T
Het type objecten dat moet worden vergeleken.
- Afgeleid
Voorbeelden
In het volgende voorbeeld ziet u de gedeeltelijke implementatie van een Person klasse die twee eigenschappen implementeert IEquatable<T> en heeft, LastName en NationalId.
NationalIdwordt beschouwd als een unieke id, daarom retourneert de Equals methode als de True eigenschap van twee NationalId objecten identiek is; anders wordt deze geretourneerdPersonFalse.
(In het F#-voorbeeld worden geen waarden voor null exemplaren verwerktPerson.)
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
Opmerkingen
Deze interface wordt geïmplementeerd door typen waarvan de waarden kunnen worden vergeleken (bijvoorbeeld de numerieke en tekenreeksklassen). Een waardetype of -klasse implementeert de Equals methode om een typespecifieke methode te maken die geschikt is voor het bepalen van gelijkheid van instanties.
Note
De IComparable<T> interface definieert de CompareTo methode, die de sorteervolgorde bepaalt van exemplaren van het implementatietype. De IEquatable<T> interface definieert de Equals methode, die de gelijkheid van instanties van het implementatietype bepaalt.
De IEquatable<T> interface wordt gebruikt door algemene verzamelingsobjecten zoals Dictionary<TKey,TValue>, List<T>en LinkedList<T> bij het testen op gelijkheid in methoden zoals Contains, IndexOf, LastIndexOfen Remove. Deze moet worden geïmplementeerd voor elk object dat kan worden opgeslagen in een algemene verzameling.
Zie opmerkingen over de methode voor meer informatie over het implementeren van de IEquatable<T>IEquatable<T>.Equals interface.
Notities voor uitvoerders
Vervang de typeparameter van de IEquatable<T> interface door het type dat deze interface implementeert.
Als u implementeert IEquatable<T>, moet u ook de basisklasse-implementaties Equals(Object)GetHashCode() van en zodanig overschrijven dat hun gedrag consistent is met die van de Equals(T) methode. Als u de Equals(Object)onderdrukking uitvoert, wordt uw overschreven implementatie ook aangeroepen in aanroepen naar de statische Equals(System.Object, System.Object) methode in uw klas. Bovendien moet u de op_Equality en op_Inequality operators overbelasten. Dit zorgt ervoor dat alle tests voor gelijkheid consistente resultaten retourneren.
Zie voor meer informatie over het overschrijven Equals(Object)Equals(Object).
Voor een waardetype moet u altijd implementeren IEquatable<T> en overschrijven Equals(Object) voor betere prestaties. Equals(Object) waardetypen van vakken en is afhankelijk van weerspiegeling om twee waarden voor gelijkheid te vergelijken. Zowel uw implementatie van Equals(T) als uw onderdrukking Equals(Object) moeten consistente resultaten opleveren.
Als u implementeert IEquatable<T>, moet u ook implementeren IComparable<T> als exemplaren van uw type kunnen worden gesorteerd of gesorteerd. Als uw type wordt geïmplementeerd IComparable<T>, implementeert IEquatable<T>u bijna altijd ook .
Houd er rekening mee dat er enkele ontwerpen zijn waarbij een type een orderrelatie ondersteunt, maar gelijkheid kan verschillen van een orderrelatie. Overweeg een Person klas waar u alfabetisch sorteert. Twee personen met dezelfde naam sorteren hetzelfde, maar zijn niet dezelfde persoon.
Methoden
| Name | Description |
|---|---|
| Equals(T) |
Hiermee wordt aangegeven of het huidige object gelijk is aan een ander object van hetzelfde type. |