Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

C# Operatorüberladung: Benutzerdefinierte Operatoren für eigene Typen

Operatorüberladung

C# erlaubt die Neudefinition der meisten eingebauten Operatoren für benutzerdefinierte Typen (struct, class). Ein überladener Operator ist eine static Methode mit dem Namen operator <Symbol>.

Syntax

public static ReturnType operator Op(ParameterList)
{
    // Implementierung
}

Beispiel: Box-Klasse mit + Operator

public class Box
{
    private double Length, Breadth, Height;

    public double Volume => Length * Breadth * Height;

    public void SetDimensions(double l, double b, double h)
    {
        Length = l; Breadth = b; Height = h;
    }

    // Addition zweier Boxen
    public static Box operator +(Box b1, Box b2)
    {
        Box result = new Box();
        result.Length = b1.Length + b2.Length;
        result.Breadth = b1.Breadth + b2.Breadth;
        result.Height = b1.Height + b2.Height;
        return result;
    }
}

// Nutzung
Box box1 = new Box(); box1.SetDimensions(6, 7, 5);   // Vol 210
Box box2 = new Box(); box2.SetDimensions(12, 13, 10); // Vol 1560
Box box3 = box1 + box2; // nutzt operator+
Console.WriteLine($"Volume: {box3.Volume}"); // 5400 (18×20×15)

Überladbare vs. Nicht überladbare Operatoren

KategorieOperatorenÜberladbar?
Unär+ - ! ~ ++ -- true falseJa
Binär (arithmetisch)+ - * / %Ja
Vergleich== != < > <= >=Ja (paarweise: ==/!=, </>, <=/>=)
Bedingt-logisch&& ||Nein (aber über &, |, true, false indirekt)
Zuweisung+= -= *= /= %=Nein (werden aus binärem Operator + = synthetisiert)
Andere= . ?: -> new is sizeof typeofNein

Vergleichsoperatoren überladen

Bei Überladung von == muss != ebenfalls überladen werden. Empfohlen: Auch Equals() und GetHashCode() überschreiben.

public static bool operator ==(Box lhs, Box rhs)
{
    if (ReferenceEquals(lhs, null)) return ReferenceEquals(rhs, null);
    return lhs.Equals(rhs);
}

public static bool operator !=(Box lhs, Box rhs) => !(lhs == rhs);

public override bool Equals(object obj) => obj is Box other && this == other;
public override int GetHashCode() => HashCode.Combine(Length, Breadth, Height);

Weitere Operatoren im Beispiel

< > <= >=  // Vergleiche Volumen oder Dimensionen
ToString()    // Für lesbare Ausgabe

Vollständiges Beispiel (Auszug)

public static bool operator <(Box lhs, Box rhs) => 
    lhs.Length < rhs.Length && lhs.Breadth < rhs.Breadth && lhs.Height < rhs.Height;

public override string ToString() => $"({Length}, {Breadth}, {Height})";

Ausgabe:

Box 1: (6, 7, 5)
Box 2: (12, 13, 10)
Volume of Box1: 210
Volume of Box2: 1560
Box 3: (18, 20, 15)
Volume of Box3: 5400
Box1 is not greater than Box2
Box1 is less than Box2
Box3 is equal to Box4

C Sprache

  1. C# Operatoren – Umfassender Leitfaden zu Operatoren in C#
  2. C# Ternärer Operator: Knapper Leitfaden zu bedingten Ausdrücken
  3. Methodenüberladung in C# meistern: Konzepte, Beispiele und Best Practices
  4. Konstruktorüberladung in C# meistern
  5. Operator Overloading in Python meistern: Ein praktischer Leitfaden
  6. Java instanceof-Operator: Ein umfassender Leitfaden
  7. DIY Wall-E-inspirierter Raspberry Pi CD-Box-Roboter
  8. Operator-beteiligte Instandhaltung: Überwiegen die Gewinne die versteckten Kosten?
  9. C++ Operator‑Overloading: Praktischer Leitfaden mit Code‑Beispielen
  10. C++ Overloading: Funktionen & Operatoren erklärt