Operatoren überschreiben/überladen

  • Nachdem mir ein ehmaliger Klassenkamerad vor kurzem zeigte, dass man in Delphi Operatoren überladen bzw. überschreiben kann, stelle ich nun fest: Das geht auch in C#.


    Ich selbst habe noch keine wirkliche Verwendung gefunden, aber ich finde es irgentwie cool :D


    Zunächst brauchen wir eine Klasse:


    Rechenoperatoren


    Diese Klasse möchte ich gerne Addieren können:


    Code
    1. Class1 c1 = new Class1(15, 30);
    2. Class1 c2 = new Class1(5, 20);
    3. c1 += c2;



    Dies geht erstmal nicht, da .NET ja nicht weis wie man die Klasse addieren kann.

    Code
    1. Fehler 1 Der Operator "+=" kann nicht auf Operanden vom Typ "Test.Class1" und "Test.Class1" angewendet werden.


    Also erstellen wir einen Plus-Operator, und erklären in diesem wie man die beiden Klassen addiert.



    Das ganze geht natürlich nicht nur mit dem Plus-Operator, sondern auch mit allen anderen Operatoren.


    Boolean-Ausdrücke
    Neben den Rechenoperatoren gibt es noch die Ausdrücke (==, !=, <=, >=, etc.)


    So könnte man prüfen, ob die beiden Klassen gleich sind:

    Code
    1. public static bool operator ==(Class1 v1, Class1 v2)
    2. {
    3. if ((v1.Zahl1 == v2.Zahl1) && (v1.Zahl2 == v2.Zahl2))
    4. return true;
    5. else
    6. return false;
    7. }



    Weiteres
    Zusätzlich kann man auch verschiedene Datentypen angeben. Wenn man z.B. Klasse + Integer oder Klasse1 + Klasse2 rechnen möchte oder mit etwas anderem vergleichen möchte. Welchen Sinn auch immer das haben könnte.