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;

Operadores, evaluación y prioridad de operadoresOperators, Evaluation, and Operator Precedence

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.

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.

En la tabla siguiente se separan los operadores en categorías en función del tipo de operación que realizan.The following table separates the operators into categories based on the type of operation they perform. Las categorías se muestran en orden de prioridad.The categories are listed in order of precedence.

Operadores principalesPrimary Operators

ExpresiónExpression DescripciónDescription
x.yx.y

x?.yx?.y
Acceso a miembrosMember access

Acceso a miembros condicionalConditional member access
f(x)f(x) Invocación de método y delegadoMethod and delegate invocation
a[x]a[x]

a?[x]a?[x]
Acceso a matriz e indizadorArray and indexer access

Acceso a matriz e indizador condicionalConditional array and indexer access
x++x++ PostincrementoPost-increment
x--x-- PostdecrementoPost-decrement
new T(...)new T(...) Creación de objetos y delegadosObject and delegate creation
new T(...){...}new T(...){...} Creación de objetos con inicializador.Object creation with initializer. Vea Inicializadores de objeto y de colección.See Object and Collection Initializers.
new {...}new {...} Inicializador de objeto anónimo.Anonymous object initializer. Vea Tipos anónimos.See Anonymous Types.
new T[...]new T[...] Creación de matriz.Array creation. Vea Matrices.See Arrays.
typeof(T)typeof(T) Obtener el objeto System.Type para TObtain System.Type object for T
checked(x)checked(x) Evaluar expresión en contexto comprobadoEvaluate expression in checked context
unchecked(x)unchecked(x) Evaluar expresión en contexto no comprobadoEvaluate expression in unchecked context
default (T)default (T) Obtener valor predeterminado de tipo TObtain default value of type T
delegate {}delegate {} Función anónima (método anónimo)Anonymous function (anonymous method)

Operadores unariosUnary Operators

ExpresiónExpression DescripciónDescription
+x+x identidadIdentity
-x-x NegaciónNegation
!x!x Negación lógicaLogical negation
~x~x Negación bit a bitBitwise negation
++x++x PreincrementoPre-increment
--x--x PredecrementoPre-decrement
(T)x(T)x Convertir x explícitamente en tipo TExplicitly convert x to type T

Operadores de multiplicaciónMultiplicative Operators

ExpresiónExpression DescripciónDescription
* MultiplicaciónMultiplication
/ DivisiónDivision
% RestoRemainder

Operadores de sumaAdditive Operators

ExpresiónExpression DescripciónDescription
x + yx + y Suma, concatenación de cadenas, combinación de delegadosAddition, string concatenation, delegate combination
x - yx - y Resta, eliminación de delegadosSubtraction, delegate removal

Operadores de desplazamientoShift Operators

ExpresiónExpression DescripciónDescription
x << yx << y Desplazamiento a la izquierdaShift left
x >> yx >> y Desplazamiento a la derechaShift right

Operadores relacionales y de tipoRelational and Type Operators

ExpresiónExpression DescripciónDescription
x < yx < y Menor queLess than
x > yx > y Mayor queGreater than
x <= yx <= y Menor o igual queLess than or equal
x >= yx >= y Mayor o igual queGreater than or equal
x is Tx is T Devuelve true si x es T; de lo contrario, falseReturn true if x is a T, false otherwise
x as Tx as T Devuelve x escrito como T, o NULL si x no es TReturn x typed as T, or null if x is not a T

Operadores de igualdadEquality Operators

ExpresiónExpression DescripciónDescription
x == yx == y IgualEqual
x != yx != y No igualNot equal

Operadores lógicos, condicionales y NULLLogical, Conditional, and Null Operators

CategoríaCategory ExpresiónExpression DescripciónDescription
AND lógicoLogical AND x & yx & y AND bit a bit entero, AND lógico booleanoInteger bitwise AND, Boolean logical AND
XOR lógicoLogical XOR x ^ yx ^ y XOR bit a bit entero, XOR lógico booleanoInteger bitwise XOR, boolean logical XOR
OR lógicoLogical OR x | yx | y OR bit a bit entero, OR lógico booleanoInteger bitwise OR, boolean logical OR
AND condicionalConditional AND x && yx && y Evalúa y solo si x es trueEvaluates y only if x is true
OR condicionalConditional OR x || yx || y Evalúa y solo si x es falseEvaluates y only if x is false
Uso combinado de NULLNull coalescing x ??x ?? sy Se evalúa como y si x es NULL; de lo contrario, se evalúa como xEvaluates to y if x is null, to x otherwise
CondicionalConditional x ?x ? y : zy : z Se evalúa como y si x es true y como z si x es falseEvaluates to y if x is true, z if x is false

Operadores de asignación y anónimosAssignment and Anonymous Operators

ExpresiónExpression DescripciónDescription
= AsignaciónAssignment
x op= yx op= y Asignación compuesta.Compound assignment. Admite estos operadores: +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=Supports these operators: +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
(T x) => y(T x) => y Función anónima (expresión lambda)Anonymous function (lambda expression)

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

Se puede cambiar el comportamiento de los operadores para las clases y structs personalizados.You can change the behavior of 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 el artículo sobre la palabra clave operator y Operadores sobrecargables.For more information, see Overloadable Operators and the operator keyword article.

Para obtener más información, vea Palabras clave de operador y Operadores de C#.For more information, see Operator Keywords and C# Operators.

Vea tambiénSee Also