Sollte ich == für Objekt und MyType überschreiben?

8

Ich habe eine struct namens MyType , die IEquatable<MyType> implementiert.

Ich habe operator ==(MyType x, MyType y) implementiert, aber sollte ich auch operator ==(MyType x, object y) für den folgenden Fall implementieren?

Zum Beispiel:

%Vor%

Verwendung:

%Vor%     
sdgfsdh 30.01.2017, 10:40
quelle

1 Antwort

1

Kein CTS-Typ macht das, soweit ich weiß. Gute Beispiele sind Dezimal und DateTime , die beide nur die Gleichheit für ihre jeweiligen Typen und nicht für ihre Basistypen oder Schnittstellen implementieren.

Außerdem kann diese Implementierung dazu führen, dass praktisch jeder Typ mit Ihrer Struktur verglichen wird, sogar anderen Strukturen, und jemand, der Ihren Code in Zukunft verwenden könnte, könnte meinen MyType mit MyOtherType könnte sinnvoll sein, während es nur den anderen Typ boxen und dann falsch zurückgeben würde. Auch interpretiert man normalerweise == auf object als Referenzgleichheit.

  

Darüber hinaus sollten Sie die Operatoren op_Equality und op_Inequality überladen. Dies stellt sicher, dass alle Tests auf Gleichheit konsistente Ergebnisse liefern.

Die Dokumentation gibt nicht an, welche Gleichheitsoperatoren Sie verwenden sollte überladen, und der zweite Satz kann tatsächlich in den Begriffen von MyType == object im Einklang mit MyType.Equals(object) interpretiert werden. Die Tatsache, dass keine .NET-Typen dies tatsächlich tun und es zu Verwirrung führt, reicht jedoch aus, um zu sagen, dass dies keine gute Vorgehensweise ist.

Wenn andere Typen als MyType behandelt werden können, überladen Sie die explizite oder implizite Umwandlung.

    
IllidanS4 30.01.2017, 11:57
quelle

Tags und Links