Operatoren für eigene Klassen in C#

Operatoren für eigene Klassen in C#
Page content

In diesem Artikel zeige ich euch, wie ihr eigene Operatoren für eure Klassen in C# erstellt. Die Operatoren sind für die einfachen Typen wie String, Integer und Boolean definiert. Eine eigene Klasse kann meist nicht durch einen Operator mit einer anderen Klasse verbunden werden.

Dieser Artikel bezieht sich auf die Sprache C# und kann ggfs. von anderen Sprachen abweichend sein.

Was sind Operatoren?

Mit Operatoren sind Funktionen wie plus, minus, mal und geteilt gemeint. Diese Operatoren können auf Basistypen meist sofort angewendet werden. Beispiele:

int result = 5 + 3;

double x = 1.5;
double y = 2.1;
double z = x - y;
double quote = x / y;

string name = "Bob"
string message = "Hello " + name + "!";

Operatoren sind vom Typ anhängig. Beispielsweise kann ich mit + zwei Zeichenketten miteinander verbinden (siehe Zeile 9). Ein Minuszeichen würde allerdings nicht funktionieren, da es nicht definiert ist.

Standardmäßig hat eine Klasse keine Operatoren. Als Basisklasse wird meist von Object vererbt. Da eine Klasse verschiedene Felder hat und der Inhalt undefinert ist lassen sich keine global gültigen Operatoren anlegen.

Eigene Operatoren schreiben

Wie schreiben wir nun eigene Operatoren. Nehmen wir folgende Klasse an:

public class MyClass {

  public MyClass() {
  }

  public MyClass(int value) {
    Value = value;
  }

  public int Value { get; set; }
}

Diese Klasse hat nur einen integer (ganzzahligen) Wert. Folgender Code erzeugt eine Fehlermeldung:

MyClass x = new MyClass(5);
MyClass y = new MyClass(10);

// Diese Zeile erzeugt eine Fehlermeldung, da + nicht definiert ist
MyClass z = x + y;

Eine Operation wird definiert, wie eine klassische Methode. Allerdings muss das Schlüsselwort operator verwendet werden. Zudem ist der Operator (z.B. +, -, *, ==) der Funktionsname. Erstellen wir nun eine Operation für die Addition:

public class MyClass {

  public MyClass() {
  }

  public MyClass(int value) {
    Value = value;
  }

  public int Value { get; set; }

  // Diese Methode summiert die Value-Properties und gibt ein neues Objekt zurück
  public static MyClass operator + (MyClass x, MyClass y) {
    return new MyClass(x.Value + y.Value);
  }
}

Nachdem diese Operation hinzugefügt wurde, funktioniert die oben genannte Zeile mit MyClass z = x + y.

Für die Einfachheit habe ich NULL-Prüfungen in der Methode ausgelassen. Auf diese Art und Weise können nun weitere Operatoren in der eigenen Klasse ergänzt werden. Es mag durchaus Fälle geben, in denen diese Operationen gebraucht werden. Wie im Fall von Strings (Zeichenketten) gibt es auch den Fall, dass bestimmte Operationen keinen Sinn machen.

Habt ihr schon Operatoren erstellt und für welche Anwendungsfälle?