Neu in .NET 10.0 [4]: Neue OperatorĂĽberladungen in C# 14.0

C# 14.0 bietet auch OperatorĂĽberladungen fĂĽr zusammengesetzte Zuweisungsoperatoren.

vorlesen Druckansicht 2 Kommentare lesen

(Bild: Pincasso/Shutterstock)

Lesezeit: 1 Min.
Von
  • Dr. Holger Schwichtenberg
close notice

This article is also available in English. It was translated with technical assistance and editorially reviewed before publication.

OperatorĂĽberladungen beherrscht die Programmiersprache C# seit ihrer ersten Version aus dem Jahr 2002 mit dem SchlĂĽsselwort operator.

Der Dotnet-Doktor – Holger Schwichtenberg
Der Dotnet-Doktor – Holger Schwichtenberg

Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.

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)