Warum hat Microsoft den Operator + = nicht für Stringbuilder überladen? [geschlossen]

7

Warum überladen Sie für die StringBuilder-Klasse nicht den Operator + = anstelle einer eindeutigen Methode .append ()?

Append () verkettet nur Strings, warum haben sie nicht einfach + = operator like so:

%Vor%

Ist es ein Fall von Effizienz? Ist es ein Fall von Konvention oder Intuitivität?

Danke,

    
PeonProgrammer 21.02.2014, 02:05
quelle

1 Antwort

27

Arithmetische Operationen sollten auf Typen beschränkt werden, die arithmetischen Werten entsprechen. Es ist schlimm genug, dass die Summe von zwei Strings eine dritte Zeichenkette ist. Die Addition der Additionsoperation mit der Verkettung von Zeichenfolgen ist fraglich, da die Zeichenfolgenverkettung nur sehr wenige Regeln der Addition erfüllt. insbesondere a + b != b + a .

Aber für String Builder - die definitionsgemäß veränderbarer Zustand und nicht arithmetische Werte sind - ist schrecklich Die Summe zweier Dinge sollte eine dritte Sache sein, die sich von den beiden Summanden unterscheidet. Das heißt, a += b muss die gleiche Semantik haben wie a = a + b und nicht a.MutateWith(b) . Wenn am Ende keine Zuordnung zu a vorhanden ist, ist die Verbundzuweisung der falsche Operator.

Allgemeiner: Machen Sie niemals cutsys Operatorüberladungen . Betreiber Überladungen sind da, so dass Sie zwei komplexe Zahlen zu einem dritten hinzufügen können, nicht, so dass Sie einen Kunden plus ein Glas Erdnussbutter gleich eine Bestellung oder eine solche Dummheit machen können.

    
Eric Lippert 21.02.2014, 02:12
quelle

Tags und Links