Frage

den Vergleichsoperator überladen, wie wenn die beiden Variablen Punkte auf das gleiche Objekt vergleichen (d. Nicht-Wert)

public static bool operator ==(Landscape a, Landscape b)
{
    return a.Width == b.Width && a.Height == b.Height;
}

public static bool operator !=(Landscape a, Landscape b)
{
    return !(a.Width == b.Width && a.Height == b.Height);
}
War es hilfreich?

Lösung

Mit der Object.ReferenceEquals statische Methode.

Natürlich, damit die == und! = Methode, um ihre volle Funktionalität zu behalten, sollten Sie auch Equals und GetHashCode überschrieben werden, so dass sie zurückkehren einen einheitlichen Satz von Antworten auf Anrufer.

Andere Tipps

Um zu überprüfen, ob beiden Punkte auf dasselbe Objekt. Sie sollten Object.ReferenceEquals Methode verwenden. Es gibt true zurück, wenn beide gleich sind oder wenn beide null. Sonst wird es return false

Ich weiß, ihr eine alte Frage, aber wenn Sie die == oder Object.Equals Methode, um eine Überlastung gehen, sollten Sie überlasten auch den umgekehrten Operator! =.

Und in diesem Fall, da Sie interne Nummern sind zu vergleichen, sollten Sie die anderen Vergleichsoperatoren überlasten <,>, <=,> =.

Menschen, die Ihre Klasse in Zukunft verbrauchen, ob es von Drittanbietern Verbraucher oder Entwickler, die über den Code nehmen, könnten so etwas wie CodeRush oder Umgestalten, das wird automatisch „Flip“ der Logik (auch Umkehr aufgerufen verwenden die bedingt) und dann flach, aus dem 25 verschachtelten if-Syndrom zu brechen. Wenn ihr Code tut, und Sie haben den Operator == überlastet, ohne eine Überlastung der Operator! =, Könnte es die beabsichtigte Bedeutung des Codes geändert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top