Il est aussi simple que:
num1 = num2 = 5;
Lorsque vous utilisez une propriété d'objet au lieu de la variable, il est intéressant de savoir que l'accesseur get
de la valeur intermédiaire est pas appelée. Seul l'accesseur set
est appelé pour toutes les propriétés accédées dans la séquence d'affectation. Prenez par exemple une classe qui écrit sur la console à chaque appel de l'accesseur get
et 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;
}
}
}
Affichera
AccessorTest.Value.get 5
AccessorTest.Value.set 5
AccessorTest.Value.set 5
Ce qui signifie que le compilateur attribue la valeur à toutes les propriétés et il ne sera pas relire la valeur à chaque fois qu'il est attribué.
Ça a l'air bizarre mais ça marche!Merci;) – Alex
Il suffit de le lire comme il semble: num1 est égal à num2 ce qui équivaut à 5 –
Ce n'est pas étrange en fait. La logique est la suivante: L'opération d'affectation elle-même renvoie une valeur, qui est la valeur qui a été affectée. La séquence d'exécution est: '' num1 = (num2 = 5) '' et la première affectation qui est exécutée ('' num2 = 5'') renvoie la valeur 5 au monde extérieur - qui est à son tour assigné à num1. Cela fonctionne à l'infini ('' num0 = num1 = num2 = 5''). – Jpsy