Operadores (Guía de programación de C#)Operators (C# Programming Guide)

En C#, un operador es un elemento de programa que se aplica a uno o varios operandos en una expresión o instrucción.In C#, an operator is a program element that is applied to one or more operands in an expression or statement. Los operadores que toman un operando, como el operador de incremento (++) o new, se conocen como operadores unarios .Operators that take one operand, such as the increment operator (++) or new, are referred to as unary operators. Los operadores que toman dos operandos, como los operadores aritméticos (+,-,*,/) se conocen como operadores binarios .Operators that take two operands, such as arithmetic operators (+,-,*,/), are referred to as binary operators. Un operador, el operador condicional (?:), toma tres operandos y es el único operador ternario de C#.One operator, the conditional operator (?:), takes three operands and is the sole ternary operator in C#.

La instrucción de C# siguiente contiene un solo operador unario y un único operando.The following C# statement contains a single unary operator and a single operand. El operador de incremento, ++, modifica el valor del operando y.The increment operator, ++, modifies the value of the operand y.

y++;

La instrucción de C# siguiente contiene dos operadores binarios, cada uno con dos operandos.The following C# statement contains two binary operators, each with two operands. El operador de asignaciones, =, tiene la variable de entero y y la expresión 2 + 3 como operandos.The assignment operator, =, has the integer variable y and the expression 2 + 3 as operands. La propia expresión 2 + 3 está compuesta del operador de suma y dos operandos, 2 y 3.The expression 2 + 3 itself consists of the addition operator and two operands, 2 and 3.

y = 2 + 3;

Un operando puede ser una expresión válida que se compone de código de una longitud indeterminada y puede incluir un número cualquiera de subexpresiones.An operand can be a valid expression that is composed of any length of code, and it can comprise any number of sub expressions. En una expresión que contiene varios operadores, el orden de aplicación de estos viene determinado por la prioridad de operador, la asociatividady los paréntesis.In an expression that contains multiple operators, the order in which the operators are applied is determined by operator precedence, associativity, and parentheses.

Prioridad de operadoresOperator precedence

Cada operador tiene una prioridad definida.Each operator has a defined precedence. En una expresión que contiene varios operadores con distintos niveles de prioridad, la prioridad de los operadores determina el orden en que estos se evalúan.In an expression that contains multiple operators that have different precedence levels, the precedence of the operators determines the order in which the operators are evaluated. Por ejemplo, la instrucción siguiente asigna 3 a n1:For example, the following statement assigns 3 to n1:

n1 = 11 - 2 * 4;

La multiplicación se ejecuta en primer lugar porque tiene prioridad sobre la resta.The multiplication is executed first because multiplication takes precedence over subtraction.

Para obtener la lista completa de los operadores de C# ordenados por nivel de prioridad, vea Operadores de C#.For the complete list of C# operators ordered by precedence level, see C# operators.

asociatividadAssociativity

Cuando dos o más operadores con la misma prioridad están presentes en una expresión, se evalúan según su asociatividad.When two or more operators that have the same precedence are present in an expression, they are evaluated based on associativity. Los operadores asociativos a la izquierda se evalúan, por orden, de izquierda a derecha.Left-associative operators are evaluated in order from left to right. Por ejemplo, x * y / z se evalúa como (x * y) / z.For example, x * y / z is evaluated as (x * y) / z. Los operadores asociativos a la derecha se evalúan, por orden, de derecha a izquierda.Right-associative operators are evaluated in order from right to left. Por ejemplo, el operador de asignación es asociativo a la derecha.For example, the assignment operator is right associative. De lo contrario, el código siguiente produciría un error.If it were not, the following code would result in an error.

int a, b, c;  
c = 1;  
// The following two lines are equivalent.  
a = b = c;  
a = (b = c);  
  
// The following line, which forces left associativity, causes an error.  
//(a = b) = c;  

Otro ejemplo sería el operador ternario (?:), que es asociativo a la derecha.As another example the ternary operator (?:) is right associative. La mayoría de los operadores binarios son asociativos a la izquierda.Most binary operators are left associative.

Independientemente de que los operadores de una expresión sean asociativos a la izquierda o a la derecha, los operandos de cada expresión se evalúan primero, de izquierda a derecha.Whether the operators in an expression are left associative or right associative, the operands of each expression are evaluated first, from left to right. En los siguientes ejemplos se muestra el orden de evaluación de los operadores y los operandos.The following examples illustrate the order of evaluation of operators and operands.

InstrucciónStatement Orden de evaluaciónOrder of evaluation
a = b a, b, =a, b, =
a = b + c a, b, c, +, =a, b, c, +, =
a = b + c * d a, b, c, d, *, +, =a, b, c, d, *, +, =
a = b * c + d a, b, c, *, d, +, =a, b, c, *, d, +, =
a = b - c + d a, b, c, -, d, +, =a, b, c, -, d, +, =
a += b -= c a, b, c, -=, +=a, b, c, -=, +=

Agregar paréntesisAdding parentheses

Se puede cambiar el orden impuesto por la prioridad de operador y la asociatividad mediante el uso de paréntesis.You can change the order imposed by operator precedence and associativity by using parentheses. Por ejemplo, 2 + 3 * 2 suele evaluarse como 8, porque los operadores de multiplicación tienen prioridad sobre los operadores de suma.For example, 2 + 3 * 2 ordinarily evaluates to 8, because multiplicative operators take precedence over additive operators. Sin embargo, si se escribe la expresión como (2 + 3) * 2, la suma se evalúa antes que la multiplicación y el resultado es 10.However, if you write the expression as (2 + 3) * 2, the addition is evaluated before the multiplication, and the result is 10. En los siguientes ejemplos se muestra el orden de evaluación en las expresiones entre paréntesis.The following examples illustrate the order of evaluation in parenthesized expressions. Como en ejemplos anteriores, los operandos se evalúan antes de aplicarse el operador.As in previous examples, the operands are evaluated before the operator is applied.

InstrucciónStatement Orden de evaluaciónOrder of evaluation
a = (b + c) * d a, b, c, +, d, *, =a, b, c, +, d, *, =
a = b - (c + d) a, b, c, d, +, -, =a, b, c, d, +, -, =
a = (b + c) * (d - e) a, b, c, +, d, e, -, *, =a, b, c, +, d, e, -, *, =

Sobrecarga de operadoresOperator overloading

Puede definir el comportamiento de algunos operadores para clases y estructuras personalizadas.You can define the behavior of certain operators for custom classes and structs. Este proceso se conoce como sobrecarga de operadores.This process is referred to as operator overloading. Para obtener más información, vea Sobrecarga de operadores.For more information, see Operator overloading.

Vea tambiénSee also