Neu in .NET 10.0 [4]: Neue OperatorĂĽberladungen in C# 14.0
C# 14.0 bietet auch OperatorĂĽberladungen fĂĽr zusammengesetzte Zuweisungsoperatoren.
(Bild: Pincasso/Shutterstock)
- Dr. Holger Schwichtenberg
OperatorĂĽberladungen beherrscht die Programmiersprache C# seit ihrer ersten Version aus dem Jahr 2002 mit dem SchlĂĽsselwort operator.
In C# 14.0 hat Microsoft dabei nun eine Verbesserungsmöglichkeit entdeckt: Entwicklerinnen und Entwickler können jetzt für die zusammengesetzten/verkürzten Zuweisungsoperatoren (engl. Compound Assignment Operators) +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>= und >>>= eigene Operatorimplementierungen definieren.
Bisher wurden hier immer die Operatorimplementierungen des Basisoperators (also + bei +=, - bei -=, & bei &= usw.) aufgerufen. Das passiert auch weiterhin, aber nur, wenn es keine eigene Operatorimplementierung fĂĽr den Compound Assignment Operator gibt.
Videos by heise
Das erlaubt mehr Kontrolle ĂĽber die Speichernutzung: Bei den zusammengesetzten/verkĂĽrzten Zuweisungsoperatoren kann man die Operation zwischen zwei Objekten so implementieren, dass kein neues Objekt erzeugt wird, sondern ein bestehendes Objekt weiterverwendet wird.
Die Compound Assignment Operators sind (anders als andere Operatoren) nicht static und geben void zurĂĽck, da sie das Objekt selbst manipulieren.
Folgender Codeausschnitt verwendet die User Defined Compound Assignment Operators:
namespace NET10_Console;
/// <summary>
/// Klasse mit OperatorĂĽberladung fĂĽr +, ++ und +=
/// </summary>
public class Kontostand
{
public string IBAN { get; set; }
public decimal Betrag { get; set; }
public Kontostand(string iBAN, decimal betrag)
{
Betrag = betrag;
IBAN = iBAN;
}
// ALT: OperatorĂĽberladung fĂĽr +
public static Kontostand operator +(Kontostand a, Kontostand b)
{
if (a == null || b == null)
throw new ArgumentNullException();
return new Kontostand(a.IBAN, a.Betrag + b.Betrag);
}
// NEU: OperatorĂĽberladung fĂĽr ++
public void operator ++()
{
this.Betrag += 1;
}
// NEU: OperatorĂĽberladung fĂĽr +=
public void operator +=(decimal b)
{
this.Betrag += b;
}
public override string ToString()
{
return $"Konto {IBAN}: {Betrag:c}"; // formatiert als Währung
(rme)