operator (Referencia de C#)operator (C# Reference)

Use la palabra clave operator para sobrecargar un operador integrado o proporcionar una conversión definida por el usuario en una declaración de clase o estructura.Use the operator keyword to overload a built-in operator or to provide a user-defined conversion in a class or struct declaration.

Para sobrecargar un operador en una clase o estructura personalizadas, puede crear una declaración de operador en el tipo correspondiente.To overload an operator on a custom class or struct, you create an operator declaration in the corresponding type. La declaración del operador que sobrecarga un operador de C# integrado debe cumplir las reglas siguientes:The operator declaration that overloads a built-in C# operator must satisfy the following rules:

  • Incluye los modificadores public y static.It includes both a public and a static modifier.
  • Incluye operator X, donde X es el nombre o símbolo del operador que está sobrecargado.It includes operator X where X is the name or symbol of the operator being overloaded.
  • Los operadores unarios tienen un parámetro y los operadores binarios tienen dos parámetros.Unary operators have one parameter, and binary operators have two parameters. En cada caso, por lo menos un parámetro debe ser del mismo tipo que la clase o estructura que declara el operador.In each case, at least one parameter must be the same type as the class or struct that declares the operator.

Para obtener información sobre cómo definir operadores de conversión, vea los artículos sobre las palabras clave explicit e implicit.For information about how to define conversion operators, see the explicit and implicit keyword articles.

Para obtener información general sobre los operadores C# que se pueden sobrecargar, vea el artículo Operadores sobrecargables.For an overview of the C# operators that can be overloaded, see the Overloadable operators article.

EjemploExample

En el ejemplo siguiente se define un tipo Fraction que representa números fraccionarios.The following example defines a Fraction type that represents fractional numbers. Sobrecarga los operadores + y * para realizar multiplicaciones y sumas fraccionarias, y también proporciona un operador de conversión que convierte un tipo Fraction en un tipo double.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
*/

Especificación del lenguaje C#C# language specification

Para obtener más información, consulte la Especificación del lenguaje C#.For more information, see the C# Language Specification. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.The language specification is the definitive source for C# syntax and usage.

Vea tambiénSee also