2015-05-23 15 views
7

Diese Frage ist nicht über die Unterschiede zwischen == und Equals. Es ist ungefähr warum sie wurden anders entworfen.Warum wurde Equals() und == anders entworfen?

wir die Unterschiede kennen verursacht viele Probleme, die ziemlich einfach gewesen sein muss vorne beschmutzen bis:

  • Equals und == Ausbeute unterschiedliche Ergebnisse für zwei Instanzen derselben Einheit.
  • == Ausbeute unterschiedliche Ergebnisse, wenn Unterklassen zu vergleichen, weil == nicht polymorph
+0

Steve, wie wäre es mit dem Lesen der ersten Zeile meiner Frage, bevor Sie voreilige Schlüsse ziehen? Es geht NICHT um den Unterschied, sondern WARUM es anders gestaltet wurde. Eine ganz andere Frage. –

+4

@Claies Ich denke, es ist ausreichend nicht offensichtlich. –

+1

Claies, sicherlich weiß ich nicht, denn alle meine Recherchen deuten auf unterschiedliche Erklärungen der Unterschiede hin. Keiner von ihnen über die verschiedenen Zwecke. Warum erklärst du dir nicht die verschiedenen Zwecke oder poste einen Link? –

Antwort

3

Die kurze Antwort ist, dass die Sprache C# Design-Team und das Design-Team .NET-Framework nicht einigen können, wie am besten Wert vergleichen/Objekte für die Gleichheit, also implementiert jedes ihr eigenes System.

Eine technische, detaillierte Antwort finden Sie unter a blog post on the subject by Eric Lippert.

+2

Dies könnte durch die Tatsache angezeigt werden, dass es keine Unterstützung in der IL-Sprache für Operatoren gibt. Sie werden vom C# -Compiler (und von anderen "kompatiblen" Sprachen) mithilfe von Methoden (mit bestimmten Namen und mit dem Namen des Sondernamens) ... https://msdn.microsoft.com/en-us/library/aa735713 "gebaut" (v = vs.71) .aspx *** Operatorüberladung ist nicht im CLS **. Das CLS bietet jedoch Richtlinien zum Bereitstellen nützlicher Namen (z. B. Add()) und zum Festlegen eines Bits in Metadaten. Compiler, die das Überladen von Operatoren unterstützen, sollten diesen Richtlinien folgen, müssen dies jedoch nicht tun.* – xanatos

+0

Da Eric Lippert, ein ehemaliger Sprachdesigner für C#, zustimmt, dass die Framework-Designer wahrscheinlich die richtige Framework-Entscheidung getroffen haben, wird Ihre über vereinfachte Paraphrase * grob ungenau *. Ihre Antwort wird dann schlechter als eine Nur-Link-Antwort, da sie die Art und Weise falsch darstellt, auf die sie verweist. –

+1

@PieterGeerkens, es gibt zwei (eigentlich drei, aber lasst uns zwei bleiben) Möglichkeiten, Gleichheit in C# /. NET zu tun. Wenn Sie also ausschließen, dass zwei Gruppen nicht übereinstimmen und zwei verschiedene Systeme implementiert haben, bleibt uns die Idee, dass eine einzige Konsensusgruppe der Ansicht ist, dass es eine gute Idee wäre, zwei inkompatible Gleichheitssysteme zu schaffen. Irgendwie denke ich, meine Zusammenfassung, weit davon entfernt, "grob ungenau" zu sein, ist eine sehr genaue Tatsachenaussage, denn die Alternative ist sehr besorgniserregend. –

Verwandte Themen