IEquatable<T> Arabirim
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Bir değer türünün veya sınıfın örneklerin eşitliğini belirlemek için türe özgü bir yöntem oluşturmak için uyguladığı genelleştirilmiş bir yöntemi tanımlar.
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ür Parametreleri
- T
Karşılaştıracak nesne türü.
- Türetilmiş
Örnekler
Aşağıdaki örnek, uygulayan ve iki özelliği PersonIEquatable<T>olan LastName bir NationalId sınıfın kısmi uygulamasını ve öğesini gösterir.
NationalIdbenzersiz bir tanımlayıcı olarak kabul edilir, bu nedenle Equals iki nesnenin True özelliği aynıysa yöntemi döndürürNationalId; aksi takdirde döndürürPersonFalse.
(F# örneğinin örneklerin değerlerini null işlemediğini Person unutmayın.)
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
Açıklamalar
Bu arabirim, değerleri eşitlenebilen türler tarafından uygulanır (örneğin, sayısal ve dize sınıfları). Değer türü veya sınıfı, örneklerin Equals eşitliğini belirlemek için uygun türe özgü bir yöntem oluşturmak için yöntemini uygular.
Not
IComparable<T> arabirimi, uygulayan türün örneklerinin sıralama düzenini belirleyen yöntemini tanımlarCompareTo. IEquatable<T> arabirimi, uygulayan türün örneklerinin eşitliğini belirleyen yöntemini tanımlarEquals.
ArabirimIEquatable<T>, , ve Dictionary<TKey,TValue> gibi yöntemlerde eşitlik testi yaparken , ve gibi List<T>LinkedList<T>ContainsIndexOfLastIndexOfRemovegenel koleksiyon nesneleri tarafından kullanılır. Genel bir koleksiyonda depolanabilecek herhangi bir nesne için uygulanmalıdır.
Arabirimi uygulama IEquatable<T> hakkında daha fazla bilgi için yöntemle ilgili açıklamalar bölümüne IEquatable<T>.Equals bakın.
Uygulayanlara Notlar
Arabirimin type parametresini IEquatable<T> bu arabirimi uygulayan türle değiştirin.
uygularsanız IEquatable<T>, ve temel sınıf uygulamalarını Equals(Object)GetHashCode() da geçersiz kılmalısınız, böylece davranışları yönteminkiyle Equals(T) tutarlı olur. geçersiz kılarsanız Equals(Object)geçersiz kılınan uygulamanız, sınıfınızdaki statik Equals(System.Object, System.Object) yönteme yapılan çağrılarda da çağrılır. Ayrıca ve op_Equality işleçlerini op_Inequality aşırı yüklemelisiniz. Bu, eşitlik için tüm testlerin tutarlı sonuçlar döndürmesini sağlar.
geçersiz kılma Equals(Object)hakkında bilgi için bkz Equals(Object). .
Bir değer türü için her zaman daha iyi performans için uygulamalı IEquatable<T> ve geçersiz kılmalısınız Equals(Object) . Equals(Object) , değer türlerini kutular ve eşitlik için iki değeri karşılaştırmak için yansımaya dayanır. Hem uygulamanızın Equals(T) hem de geçersiz kılmanızın tutarlı sonuçlar döndürmesi Equals(Object) gerekir.
uygularsanız IEquatable<T>, türünüzün örnekleri sıralanabilir veya sıralanabilirse de uygulamanız IComparable<T> gerekir. Türünüz uygularsa IComparable<T>, neredeyse her zaman da uygularsınız IEquatable<T>.
Bir türün sipariş ilişkisini desteklediği ancak eşitliğin bir sipariş ilişkisinden farklı olabileceği bazı tasarımlar olduğunu unutmayın. Alfabetik olarak sıraladığınız bir Person sınıf düşünün. Aynı ada sahip iki kişi aynı şekilde sıralanır ancak aynı kişi değildir.
Yöntemler
| Name | Description |
|---|---|
| Equals(T) |
Geçerli nesnenin aynı türdeki başka bir nesneye eşit olup olmadığını gösterir. |