Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original
0 von 1 fanden dies hilfreich - Dieses Thema bewerten.

Object.Equals-Methode (Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)
abstract Equals : 
        obj:Object -> bool 
override Equals : 
        obj:Object -> bool 

Parameter

obj
Typ: System.Object
Das Objekt, das mit dem aktuellen Objekt verglichen werden soll.

Rückgabewert

Typ: System.Boolean
true , wenn das angegebene Objekt und das aktuelle Objekt gleich sind, andernfalls false.

Der Typ des Vergleichs zwischen der aktuellen Instanz und dem obj-Parameter hängt davon ab, ob die aktuelle Instanz ein Verweistyp oder ein Werttyp ist. Wenn die aktuelle Instanz ein Verweistyp ist, ist die Equals(Object)-Methodentests für Verweisgleichheit und ein Aufruf der - Equals(Object)-Methode zu einem Aufruf der - Methode. ReferenceEquals Verweisgleichheit bedeutet, dass die Objektvariablen, die verglichen werden, das gleiche Objekt verweisen. Das folgende Beispiel veranschaulicht das Ergebnis eines solchen Vergleichs. Es definiert eine Klasse Person, die ein Verweistyp ist, und ruft den Person-Klassenkonstruktor auf, um zwei neue Person-Objekte, person1a und person2, zu instanziieren, die denselben Wert haben. Sie weist auch person1a zu einer anderen Objektvariablen, person1b zu. Wie die Ausgabe im Beispiel zeigt, person1a und person1b sind gleich, da sie auf dasselbe Objekt verweisen. Allerdings sind person1a und person2 nicht gleich, obwohl sie denselben Wert haben.

Derzeit ist kein Code Beispiel verfügbar, oder die Sprache wird nicht unterstützt.

Wenn die aktuelle Instanz ein Werttyp ist, dann testet die Equals(Object)-Methode auf Wertgleichheit. Wertgleichheit bedeutet Folgendes:

  • Die beiden Objekte sind vom gleichen Typ.

    Wie das folgende Beispiel zeigt, entspricht ein Byte Objekt, das einen Wert von 12 hat nicht einem

    Int32 Objekt, das ebenfalls einen Wert von 12 hat, da die beiden Objekte verschiedene Laufzeittypen haben.

    Derzeit ist kein Code Beispiel verfügbar, oder die Sprache wird nicht unterstützt.
  • Die Werte der öffentlichen und privaten Felder der beiden Objekte sind gleich. Im folgenden Beispiel wird die Wertgleichheit überprüft. Sie definiert eine Person-Struktur, die ein Werttyp ist, und ruft den Person-Klassenkonstruktor auf, um zwei neue Person-Objekte, person1 und person2, zu instanziieren, die denselben Wert haben. Wie die Ausgabe im Beispiel zeigt, obwohl die zwei Objektvariablen verschiedene Objekte verweisen, person1 und person2 gleich sind, da sie den gleichen Wert für das private personName Feld verfügen.

    Derzeit ist kein Code Beispiel verfügbar, oder die Sprache wird nicht unterstützt.

Da die Object-Klasse ist, die Basisklasse für alle Typen in .NET Framework, die Object.Equals(Object)-Methode zur Verfügung stellt den Standardgleichheitsvergleich für alle anderen Typen. jedoch überschreiben Typen häufig die Equals-Methode, um Wertgleichheit zu implementieren. Weitere Informationen finden Sie in den Hinweisen für Aufrufer und die Hinweise für Erbenabschnitte.

Hinweise für Aufrufer

Abgeleitete Klassen überschreiben Object.Equals(Object) häufig die - Methode, um Wertgleichheit zu implementieren. Darüber hinaus stellen Typen häufig auch eine zusätzliche stark typisierte - Überladung Equals-Methode bereit. Wenn Sie die Equals-Methode aufrufen, um eine Überprüfung auf Gleichheit, sollten Sie wissen, ob die aktuelle Instanz Object.Equals überschreibt und verstehen, wie ein bestimmter Aufruf einer Methode Equals aufgelöst wird. Andernfalls führen Sie möglicherweise einen Übereinstimmungstest aus, die unterscheiden kann, was Sie möglicherweise vorgesehen und der - Methode einen unerwarteten Wert zurückgeben.

Dies wird im folgenden Beispiel veranschaulicht. Er instanziiert drei StringBuilder-Objekte mit identischen Zeichenfolgen und stellt dann vier Aufrufe Equals-Methoden. Die ersten Methodenaufruf gibt true zurück, und die übrigen drei geben false zurück.

Derzeit ist kein Code Beispiel verfügbar, oder die Sprache wird nicht unterstützt.

Im ersten Fall wird die stark typisierte StringBuilder.Equals(StringBuilder)-Methodenüberladung, die der Wertgleichheit testet, aufgerufen. Da die Zeichenfolgen, die den zwei StringBuilder-Objekten zugewiesen werden, gleich sind, gibt die Methode true zurück. überschreibt jedoch StringBuilder nicht Object.Equals(Object). Aufgrund dieser wenn das StringBuilder-Objekt zu Object umgewandelt wird, wenn eine StringBuilder-Instanz einer Variable des Typs Object zugewiesen wird und wenn der Object.Equals(Object, Object)-Methode zwei StringBuilder-Objekte übergeben wird, wird die Object.Equals(Object)-Standardmethode aufgerufen. Da StringBuilder ein Verweistyp ist, ist das Übergeben der zwei StringBuilder-Objekte zur ReferenceEquals-Methode. Obwohl alle drei StringBuilder-Objekte identische Zeichenfolgen enthalten, betreffen sie drei verschiedene Objekte. Daher geben diese drei Methodenaufrufe false zurück.

Sie können das aktuelle Objekt mit einem anderen Objekt für Verweisgleichheit vergleichen, indem Sie die ReferenceEquals-Methode aufrufen. In Visual Basic können Sie auch das is-Schlüsselwort (z. B. If Me Is otherObject Then ...) verwenden.

Hinweise zur Vererbung

Wenn Sie einen eigenen Typ definieren, erbt dieser Typ die Funktionalität, die von der Equals-Methode seines Basistyps definiert ist. In der folgenden Tabelle wird die Standardimplementierung der - Methode Equals für die wichtigsten Kategorien von Typen in .NET Framework aufgeführt.

Typkategorie

Gleichheit von definierten

Kommentare

Klasse wird direkt von Object

Object.Equals(Object)

Verweisgleichheit; Entsprechung zum Aufrufen von Object.ReferenceEquals.

Struktur

ValueType.Equals

Wertgleichheit; entweder direkter Vergleich auf Byteebene oder Feld-durchFeldvergleich mit Reflektion.

Enumeration

Enum.Equals

Werte müssen den gleichen Enumerationstyp und den gleichen zugrunde liegenden Wert haben.

delegate

MulticastDelegate.Equals

Delegaten müssen den gleichen Typ mit identischen Aufruflisten haben.

Schnittstelle

Object.Equals(Object)

Verweisgleichheit.

Sie können die Standardimplementierung von Equals auch überschreiben, um die Wertgleichheit anstelle der Verweisgleichheit zu testen und die genaue Bedeutung der Wertgleichheit zu definieren. Solche Implementierungen von Equals geben true zurück, wenn die beiden Objekte den gleichen Wert haben und sie nicht die gleiche Instanz sind. Die Implementierung des Typs entscheidet, was den Wert eines Objekts repräsentiert, aber es sind in der Regel einige oder alle Daten, die in den Instanzvariablen des Objekts gespeichert werden. Beispielsweise ist der Wert eines - Objekts String auf Grundlage der Zeichen der Zeichenfolge; String.Equals(Object) die Methode Object.Equals(Object) überschreibt die - Methode, um true für alle zwei Zeichenfolgeninstanzen zurückzugeben, die die gleiche Zeichen in der Reihenfolge enthalten.

Im folgenden Beispiel wird gezeigt, wie die Object.Equals(Object)-Methode überschreibt, um der Wertgleichheit zu testen. Sie Equals überschreibt die - Methode für die Person-Klasse. Wenn Person die Basisklassenimplementierung der Gleichheit akzeptieren, werden zwei Person-Objekte nur gleich sein, wenn sie ein einzelnes Objekt verwiesen. In diesem Fall sind zwei Person-Objekte gleich, wenn sie den gleichen Wert für die Eigenschaft Person.Id haben.

Derzeit ist kein Code Beispiel verfügbar, oder die Sprache wird nicht unterstützt.

Die folgenden Aussagen müssen für jede Implementierung der Equals(Object)-Methode zutreffen. In der Liste stellen x, y und z-Objektverweise dar, die nicht NULL sind.

  • x.Equals(x) gibt true, außer in Fälle zurück, die Gleitkommatypen einschließen. Siehe ISO/IEC/IEEE 60559:2011, Informationstechnologie -- Mikroprozessor-Systeme -- Gleitkommaarithmetik.

  • x.Equals(y) gibt den gleichen Wert wie y.Equals(x) zurück.

  • x.Equals(y) true gibt zurück, wenn x und yNaN sind.

  • Wenn (x.Equals(y) && y.Equals(z))true zurückgibt, gibt x.Equals(z)true zurück.

  • Aufeinander folgende Aufrufe x.Equals(y) geben den gleichen Wert zurück, solange die Objekte, die von x und y verweisen, werden nicht geändert.

  • x.Equals(null) gibt false zurück.

Implementierungen von Equals dürfen keine Ausnahmen auslösen.

Beachten Sie folgende Richtlinien, wenn Equals(Object) überschrieben wird:

  • Typen, die IComparable implementieren, müssen Equals(Object) überschreiben.

  • Typen, die Equals(Object) überschreiben, müssen GetHashCode auch überschreiben; Andernfalls funktionieren möglicherweise nicht ordnungsgemäß Hashtabellen.

  • Wenn die Programmiersprache Operatorüberladung unterstützt und Sie den Gleichheitsoperator für einen angegebenen Typ überladen, müssen Sie die Equals(Object)-Methode auch überschreiben, um das gleiche Ergebnis wie der Gleichheitsoperator zurückzugeben. Dies hilft, sicherzustellen, dass Klassenbibliothekscode, der Equals verwendet (z ArrayList und Hashtable) in ähnlicher Weise, das mit der - Methode der Gleichheitsoperator konsistent ist, wird mithilfe von Anwendungscode verhält.

bsc2ak47.collapse_all(de-de,VS.110).gifRichtlinien für Verweistypen

Die folgenden Richtlinien gelten für das Überschreiben von Equals(Object) für einen Referenztyp zu:

  • Erwägen Sie, Equals zu überschreiben, wenn die Semantik des Typs auf Grundlage der Tatsache ist, dass der Typ einige Werte darstellt.

  • Referenztypen dürfen den Gleichheitsoperator i. d. R. auch dann nicht überladen, wenn sie Equals überschreiben. Wenn Sie allerdings einen Referenztyp implementieren, der Wertsemantik besitzen soll, z. B. einen Typ, der komplexe Zahlen darstellt, müssen Sie den Gleichheitsoperator überschreiben.

bsc2ak47.collapse_all(de-de,VS.110).gifRichtlinien für Werttypen

Die folgenden Richtlinien gelten für das Überschreiben von Equals(Object) für einen Werttyp zu:

  • Wenn Sie einen Werttyp definieren, der ein oder mehrere Felder umfasst, deren Werte Verweistypen sind, sollten Sie Equals(Object) überschreiben. Die Equals(Object) Implementierung, die von ValueType bereitgestellt wird, führt einen Vergleich auf Byteebene für Werttypen, deren Felder alle Werttypen sind, aber er verwendet Reflektion, um einen Feld-durchFeldvergleich von Werttypen auszuführen, deren Felder Verweistypen umfassen.

  • Wenn Sie Equals und die Entwicklungssprachunterstützungsoperatorüberladung überschreiben, müssen Sie den Gleichheitsoperator überladen.

Im folgenden Beispiel wird eine Point-Klasse, die die Equals-Methode überschreibt, um Wertgleichheit bereitzustellen, und eine Point3D-Klasse an, die von Point abgeleitet wird. Da PointObject.Equals(Object) überschreibt, um der Wertgleichheit zu testen, wird die Object.Equals(Object)-Methode nicht aufgerufen. Es ruft Point3D.EqualsPoint.Equals auf, da PointObject.Equals(Object) in ähnlicher Weise implementiert, das Wertgleichheit bereitstellt.

Derzeit ist kein Code Beispiel verfügbar, oder die Sprache wird nicht unterstützt.

Die Point.Equals-Methodenüberprüfungen, sicherzustellen, dass das obj-Argument nicht NULL ist und ob es eine Instanz des gleichen Typs wie dieses Objekt verweist. Wenn jede Überprüfung fehlschlägt, gibt die Methode false zurück.

Die Point.Equals-Methode ruft die - Methode, GetType zu bestimmen, ob die Laufzeittypen der zwei Objekte identisch sind. Wenn die - Methode eine Überprüfung des Formulars obj is Point in C# oder des TryCast(obj, Point) in Visual Basic verwendet wird, wird die Überprüfung true zurückgeben, wenn obj eine Instanz einer abgeleiteten Klasse Point ist, obwohl obj und die aktuelle Instanz nicht vom gleichen Laufzeittyp sind. Nachdem bestätigt wurde, dass beide Objekte denselben Typ haben, wandelt diese Methode obj in den Typ Point um und gibt das Ergebnis des Vergleichs der Instanzvariablen der beiden Objekte zurück.

In Point3D.Equals wird die geerbte - Methode Point.Equals, die Object.Equals(Object) überschreibt, aufgerufen, bevor sonstige erfolgt. Die geerbten Point.Equals-Methodenüberprüfungen, sicherzustellen, dass obj nicht NULL ist, dass obj eine Instanz der gleichen Klasse wie dieses Objekt ist und dass die geerbten Instanzvariablen übereinstimmen. Nur wenn die geerbte Point.Equals-Methode zurückgibt, wird die - Methode true vergleichen die Instanzvariablen, die in der abgeleiteten Klasse eingegeben werden. Genauer gesagt wird die Umwandlung in Point3D nur dann ausgeführt, wenn festgestellt wurde, dass obj den Typ Point3D aufweist oder eine von Point3D abgeleitete Klasse ist.

Im folgenden Beispiel wird eine Rectangle-Klasse, die intern ein Rechteck als zwei Point-Objekte implementiert. Die Rectangle-Klasse überschreibt auch Object.Equals(Object), um der Wertgleichheit bereitzustellen.

Derzeit ist kein Code Beispiel verfügbar, oder die Sprache wird nicht unterstützt.

Einige Sprachen wie C# und Visual Basic unterstützen Operatorüberladung. Wenn ein Typ den Gleichheitsoperator überlädt, muss er auch dieEquals(Object)-Methode außer Kraft setzen, um dort dieselben Funktionen bereitzustellen. Dies geschieht i. d. R., indem die Equals(Object)-Methode wie im folgenden Beispiel als überladener Gleichheitsoperator geschrieben wird.

Derzeit ist kein Code Beispiel verfügbar, oder die Sprache wird nicht unterstützt.

Da Complex ein Werttyp ist, kann nicht von abgeleitet werden. Daher muss die Überschreibung zu Equals(Object) Möglichkeit, nicht GetType aufzurufen, um den genauen Laufzeittyp jedes Objekts zu bestimmen, und kann den is-Operator in C# oder den TypeOf-Operator in Visual Basic stattdessen verwenden, um den Typ des Parameters obj zu überprüfen.

.NET Framework

Unterstützt in: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)

Community-Beiträge

HINZUFÜGEN
© 2013 Microsoft. Alle Rechte vorbehalten.