Es tan simple como:
num1 = num2 = 5;
Cuando se utiliza una propiedad de objeto en lugar de la variable, es interesante saber que el descriptor de acceso get
del valor intermedio no se llama. Solo se invoca el acceso set
para todas las propiedades a las que se accede en la secuencia de asignación.
Tomemos como ejemplo una clase que escribe en la consola cada vez que se invoca el acceso get
y set
.
static void Main(string[] args)
{
var accessorSource = new AccessorTest(5);
var accessor1 = new AccessorTest();
var accessor2 = new AccessorTest();
accessor1.Value = accessor2.Value = accessorSource.Value;
Console.ReadLine();
}
public class AccessorTest
{
public AccessorTest(int value = default(int))
{
_Value = value;
}
private int _Value;
public int Value
{
get
{
Console.WriteLine("AccessorTest.Value.get {0}", _Value);
return _Value;
}
set
{
Console.WriteLine("AccessorTest.Value.set {0}", value);
_Value = value;
}
}
}
Esta es la salida
AccessorTest.Value.get 5
AccessorTest.Value.set 5
AccessorTest.Value.set 5
Lo que significa que el compilador asignará el valor de todas las propiedades y no va a volver a leer el valor cada vez que se le asigna.
Parece raro, pero funciona!Gracias;) – Alex
Acabo de leerlo como aparece: num1 es igual a num2, que equivale a 5 –
No es raro en realidad. La lógica es la siguiente: La operación de asignación en sí devuelve un valor, que es el valor que se ha asignado. La secuencia de ejecución es: '' num1 = (num2 = 5) '' y la primera asignación que se ejecuta ('' num2 = 5'') devuelve el valor 5 al mundo exterior, que a su vez está asignado a num1. Esto funciona ad infinitum ('' num0 = num1 = num2 = 5''). – Jpsy