operator (C#-Referenz)operator (C# Reference)

Verwenden Sie das Schlüsselwort operator, um einen integrierten Operator zu überladen oder um eine benutzerdefinierte Konvertierung in einer Klassen- oder Strukturdeklaration bereitzustellen.Use the operator keyword to overload a built-in operator or to provide a user-defined conversion in a class or struct declaration.

Zum Überladen eines Operators in einer benutzerdefinierten Klasse oder Struktur müssen Sie eine Operatordeklaration im entsprechenden Typ erstellen.To overload an operator on a custom class or struct, you create an operator declaration in the corresponding type. Die Operatordeklaration, die einen integrierten C#-Operator überlädt, muss die folgenden Regeln erfüllen:The operator declaration that overloads a built-in C# operator must satisfy the following rules:

  • Sie enthält sowohl einen public- als auch einen static-Modifizierer.It includes both a public and a static modifier.
  • Sie enthält operator X, wobei X für den Namen oder das Symbol des überladenen Operators steht.It includes operator X where X is the name or symbol of the operator being overloaded.
  • Unäre Operatoren verfügen über einen Parameter. Demgegenüber weisen binäre Operatoren zwei Parameter auf.Unary operators have one parameter, and binary operators have two parameters. In jedem Fall muss mindestens ein Parameter denselben Typ wie die Klasse oder Struktur aufweisen, die den Operator deklariert.In each case, at least one parameter must be the same type as the class or struct that declares the operator.

Weitere Informationen zum Definieren von Konvertierungsoperatoren finden Sie in den expliziten und impliziten Keyword-Artikeln.For information about how to define conversion operators, see the explicit and implicit keyword articles.

Eine Übersicht über die C#-Operatoren, die überladen werden können, finden Sie im Artikel Überladbare Operatoren.For an overview of the C# operators that can be overloaded, see the Overloadable operators article.

BeispielExample

Im folgenden Beispiel wird ein Fraction-Typ definiert, der Bruchzahlen darstellt.The following example defines a Fraction type that represents fractional numbers. Sie überlädt die Operatoren + und *, um Addition und Multiplikation bei Brüchen auszuführen, und stellt einen Konvertierungsoperator bereit, der einen Fraction-Typ in einen double-Typ konvertiert.It overloads the + and * operators to perform fractional addition and multiplication, and also provides a conversion operator that converts a Fraction type to a double type.

class Fraction
{
    int num, den;
    public Fraction(int num, int den)
    {
        this.num = num;
        this.den = den;
    }

    // overload operator +
    public static Fraction operator +(Fraction a, Fraction b)
    {
        return new Fraction(a.num * b.den + b.num * a.den,
           a.den * b.den);
    }

    // overload operator *
    public static Fraction operator *(Fraction a, Fraction b)
    {
        return new Fraction(a.num * b.num, a.den * b.den);
    }

    // user-defined conversion from Fraction to double
    public static implicit operator double(Fraction f)
    {
        return (double)f.num / f.den;
    }
}

class Test
{
    static void Main()
    {
        Fraction a = new Fraction(1, 2);
        Fraction b = new Fraction(3, 7);
        Fraction c = new Fraction(2, 3);
        Console.WriteLine((double)(a * b + c));
    }
}
/*
Output
0.880952380952381
*/

C#-SprachspezifikationC# language specification

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation.For more information, see the C# Language Specification. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.The language specification is the definitive source for C# syntax and usage.

Siehe auchSee also