Der Titel ist irreführend, bitte lesen Sie die gesamte Frage :-) .
Mit "zusammengesetzter Zuweisungsoperator" habe ich op=
zum Beispiel ein solches Konstrukt im Sinn +=
. Der reine Zuweisungsoperator ( =
) gehört nicht zu meiner Frage.
Mit "warum" meine ich keine Meinung, sondern eine Ressource (Buch, Artikel usw.), wenn einige der Designer oder ihre Mitarbeiter usw. ihre Argumentation ausdrücken (dh die Quelle der Designauswahl).
Ich bin verwirrt über die Asymmetrie in C ++ und C # ( ja, ich weiß, dass C # nicht C ++ 2.0 ist ) - in C ++ würden Sie den Operator überladen +=
und dann fast automatisch einen geeigneten +
Operator schreiben, der auf dem zuvor definierten Operator basiert . In C # ist es umgekehrt - Sie überladen +
und +=
werden für Sie synthetisiert.
Wenn ich mich nicht irre, führt der spätere Ansatz zu einer Optimierung im Falle einer tatsächlichen +=
, da ein neues Objekt erstellt werden muss. Ein solcher Ansatz muss also einen großen Vorteil haben, aber MSDN ist zu schüchtern, um darüber zu berichten.
Und ich frage mich, was dieser Vorteil ist. Wenn Sie also in einem C # -Buch, einem Tech-Talk-Video oder einem Blogeintrag eine Erklärung gefunden haben, bin ich für die Referenz dankbar.
Das nächste, was ich gefunden habe, ist ein Kommentar im Eric Lippert-Blog. Warum sind überladene Operatoren in C # immer statisch? von Tom Brown. Wenn zuerst die statische Überladung entschieden wurde, wird lediglich festgelegt, welche Operatoren für Strukturen überladen werden können. Dies bestimmt weiter, was für Klassen überladen werden kann.
*=
Mutation eines Referenztyps als semantisch falsch empfinden .
+=
zunächst absurd; Warum sollten Sie eine kombinierte Operation überlasten und nicht die Teile davon?