Überladen von +/- unäre Operatoren
Die bei überlastung die - unären Operatoren für einen unveränderlichen Typ, Sie können es schreiben wie:
public static Point3 operator - (Point3 p)
{
return new Point3 (-p.X, -p.Y, -p.Z);
}
Aber für die + unärer operator, wie sollte man das umsetzen? Wie diese:
public static Point3 operator + (Point3 p)
{
return p;
}
oder so:
public static Point3 operator + (Point3 p)
{
return new Point3 (p);
}
- Im zweiten Beispiel, meinst du den operator +, nicht?
- Ja, sorry, übersehen dass.
- Nur für die Richtigkeit, 'das' nicht vorhanden sein, die in Ihrer statischen Methode. Ich denke, du wolltest schreiben "-p.X, -p.Y, -p.Z" in der überlast.
- Dank verpasst, dass man auch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
So oder so ist in Ordnung. Sie sind nicht mutiert das ursprüngliche Objekt in einer der beiden Methoden.
Wenn Sie anrufen
string.substring(0, string.length())
gibt es keinen Grund, warum die ursprüngliche Zeichenfolge können nicht zurückgegeben werden.Der einzige Vertrag, den Sie unterzeichnen, mit der Unveränderlichkeit ist, dass, sobald ein Objekt erstellt wurde, nicht ändern.
Meiner Meinung nach kommt es auf die Umsetzung der Punkt3.Equals().
Betrachten Sie den folgenden code:
Wenn Punkt3 hat-Referenz-Semantik (pointA.Equals(pointB), wenn Sie das gleiche Objekt), wird diese Ausgabe:
Wenn Punkt3 hat Wert-Semantik (pointA.Equals(pointB), wenn Ihre x -, y-und z-Werte gleich sind),
in dieser Ausgabe:
Mit Wert-Semantik wäre es nicht wirklich wichtig, wenn Sie ein neues Objekt erstellen oder nicht. Sie könnte wahrscheinlich nur wieder das gleiche zu vermeiden, Müll.
Wenn Ihr Typ hat Referenz-Semantik, möchten Sie wahrscheinlich die unären plus ein neues Objekt zu erstellen, so dass es die gleiche Weise verhält, wie die anderen Operatoren.
Wenn die Struktur unveränderlich ist, können Sie wählen, würde ich Sie wieder den ursprünglichen Wert.
Wenn wandelbar, zurück eine neue.
Ich kann mir nicht vorstellen, einen Fall, wo würde es einen Unterschied machen, um ein immutable type. Am besten einfach zurück
p
durch Prinzip der geringsten überraschung.Ich würde lieber die zweite Methode (obwohl langsamer), aber davon
Point3
ist ein 3D-Punkt, es muss wohl einstruct
keinclass
.Ähm....
mich korrigieren, wenn ich falsch bin, aber nicht, dass die Einrichtung einer unendlichen Rekursion? Sie fordern das unäre - ( - ) - operator innerhalb der unäre - ( - ) - operator-Methode.
Mir scheint Sie gehen zu wollen, um dies zu tun:
Vorausgesetzt, Sie haben solch einen Konstruktor und Eigenschaften auf Ihre Punkt3 Klasse.