Operadores de asignación (referencia de C#)

El operador de asignación = asigna el valor de su operando de la derecha a una variable, una propiedad o un elemento de indexador que proporciona el operando de la izquierda. El resultado de una expresión de asignación es el valor asignado al operando izquierdo. El tipo del operando de la derecha debe ser el mismo que el del operando de la izquierda o debe poder convertirse implícitamente en él.

El operador de asignación = es asociativo a la derecha, es decir, una expresión con el formato

a = b = c

se evalúa como

a = (b = c)

En el ejemplo siguiente se muestra el uso del operador de asignación con una variable local, una propiedad y un elemento indexador como su operando izquierdo:

List<double> numbers = [1.0, 2.0, 3.0];

Console.WriteLine(numbers.Capacity);
numbers.Capacity = 100;
Console.WriteLine(numbers.Capacity);
// Output:
// 4
// 100

int newFirstElement;
double originalFirstElement = numbers[0];
newFirstElement = 5;
numbers[0] = newFirstElement;
Console.WriteLine(originalFirstElement);
Console.WriteLine(numbers[0]);
// Output:
// 1
// 5

El operando de la izquierda de una asignación recibe el valor del operando de la derecha. Cuando los operandos son de tipos de valor, la asignación copia el contenido del operando de la derecha. Cuando los operandos son de tipos de referencia, la asignación copia la referencia al objeto.

Esto se denomina asignación de valores: el valor se asigna.

asignación de referencia

Asignación de referencia= ref convierte su operando izquierdo en un alias en el operando derecho, como se muestra en el ejemplo siguiente:

void Display(double[] s) => Console.WriteLine(string.Join(" ", s));

double[] arr = { 0.0, 0.0, 0.0 };
Display(arr);

ref double arrayElement = ref arr[0];
arrayElement = 3.0;
Display(arr);

arrayElement = ref arr[arr.Length - 1];
arrayElement = 5.0;
Display(arr);
// Output:
// 0 0 0
// 3 0 0
// 3 0 5

En el ejemplo anterior, la variable de referencia local arrayElement se inicializa como un alias del primer elemento de la matriz. A continuación, se reasigna ref para referir al último elemento de la matriz. Como es un alias, al actualizar su valor con un operador = de asignación normal, también se actualiza el elemento de la matriz correspondiente.

El operando izquierdo de la asignación ref puede ser una variable de referencia local, un campo ref y un parámetro de método ref, out o in. Los operandos deben ser del mismo tipo.

Asignación compuesta

Para un operador binario op, una expresión de asignación compuesta con el formato

x op= y

es equivalente a

x = x op y

salvo que x solo se evalúa una vez.

La asignación compuesta es compatible con operadores aritméticos, lógicos booleanos y de desplazamiento y lógicos bit a bit.

Asignación de uso combinado de NULL

Puede usar el operador de asignación de uso combinado de NULL ??= para asignar el valor de su operando de la derecha al operando de la izquierda solo si el operando de la izquierda se evalúa como null. Para obtener más información, consulte Operadores ?? y ??.

Posibilidad de sobrecarga del operador

Un tipo definido por el usuario no puede sobrecargar el operador de asignación. Sin embargo, un tipo definido por el usuario puede definir una conversión implícita a otro tipo. De este modo, el valor de un tipo definido por el usuario puede asignarse a una variable, una propiedad o un elemento de indizador de otro tipo. Para obtener más información, vea Operadores de conversión definidos por el usuario.

Un tipo definido por el usuario no puede sobrecargar de forma explícita un operador de asignación compuesta. Pero si un tipo definido por el usuario sobrecarga un operador binario op, el operador op=, si existe, también se sobrecarga de forma implícita.

especificación del lenguaje C#

Para más información, consulte la sección sobre operadores de asignación de la Especificación del lenguaje C#.

Consulte también