Heim > Backend-Entwicklung > C++ > Wie vergleiche ich Referenztypen in .NET am besten?

Wie vergleiche ich Referenztypen in .NET am besten?

Mary-Kate Olsen
Freigeben: 2025-01-07 17:51:40
Original
208 Leute haben es durchsucht

How to Best Compare Reference Types in .NET?

Best Practices für den Vergleich von .NET-Referenztypen

Beim Vergleich von Referenztypen in .NET ist es wichtig, den Unterschied zwischen Referenzgleichheit und Wertgleichheit zu verstehen. Referenzgleichheit prüft, ob zwei Referenzen auf dasselbe Objekt verweisen, während Wertegleichheit prüft, ob die Objekte dieselben Daten haben.

Überschreiben Sie den Gleichheitsoperator (==) und die Equals-Methode

Es wird nicht empfohlen, den Gleichheitsoperator (==) und/oder die Equals-Methode zu überschreiben, um Referenztypen zu vergleichen, es sei denn, der Typ drückt Wertesemantik aus (d. h. unveränderliche Objekte, die aufgrund ihrer Daten als gleich betrachtet werden). Erwägen Sie in diesem Fall die Implementierung der System.IEquatable-Schnittstelle und drei Operatoren: Equals, GetHashCode und ==/!=.

IEquatable-Schnittstelle

Wenn Ihr Referenztyp Wertesemantik darstellt, implementieren Sie System.IEquatable. Dies stellt eine korrekte und effiziente Umsetzung der Wertgleichheit sicher, einschließlich der getrennten Behandlung von Objektidentität und Wertgleichheit.

IComparable-Schnittstelle

IComparable ist in erster Linie für die Verwendung mit Werttypen und nicht für Referenztypen konzipiert. Vermeiden Sie die Verwendung mit Referenztypen.

Benutzerdefinierter Vergleich

Anstatt den Gleichheitsoperator zu überschreiben oder IComparable zu implementieren, sollten Sie erwägen, eine benutzerdefinierte Methode zum Vergleichen von Referenztypen zu erstellen. Verwenden Sie die Equals-Methode, um die Objektidentität zu überprüfen und sie zu überschreiben, um verwandte Eigenschaften zu vergleichen.

Beispiel für gleiche Werte

Das Folgende ist ein Beispiel für die Implementierung der Wertegleichheit für die Point-Klasse:

<code class="language-csharp">class Point : IEquatable<Point>
{
    public int X { get; }
    public int Y { get; }

    public Point(int x = 0, int y = 0) { X = x; Y = y; }

    public bool Equals(Point other)
    {
        if (other is null) return false;
        return X.Equals(other.X) && Y.Equals(other.Y);
    }

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

    public static bool operator ==(Point lhs, Point rhs) => object.Equals(lhs, rhs);

    public static bool operator !=(Point lhs, Point rhs) => !(lhs == rhs);

    public override int GetHashCode() => HashCode.Combine(X, Y);
}</code>
Nach dem Login kopieren

Fazit

Für Referenztypen mit Wertesemantik implementieren Sie System.IEquatable und alle drei Gleichheitsoperatoren (Equals, GetHashCode, ==/!=). Für Referenzklassen, die veränderliche Werte darstellen, überschreiben Sie nicht den Operator ==/!=. Verwenden Sie ihr Standardverhalten, um die Objektidentität zu überprüfen.

Das obige ist der detaillierte Inhalt vonWie vergleiche ich Referenztypen in .NET am besten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage