Это так просто, как:
num1 = num2 = 5;
При использовании свойства объекта вместо переменной интересно знать, что метод getдоступа к промежуточному значению не вызывается. Толькоset доступа вызывается для всех свойств, к которым осуществляется доступ в последовательности присваивания.
Возьмем, например, класс, запись в консоли Каждый раз, когда getи 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;
}
}
}
Это будет выводить
AccessorTest.Value.get 5
AccessorTest.Value.set 5
AccessorTest.Value.set 5
Это означает, что компилятор назначит значение всем свойствам и не будет перечитывать значение каждый раз, когда ему присваивается значение.
num1 = (num2 = 5)и первое присвоение, которое выполняется (num2 = 5), возвращает значение 5 внешнему миру, которое, в свою очередь, присваивается num1. Это работает до бесконечности (num0 = num1 = num2 = 5).