Jest to tak proste, jak:
num1 = num2 = 5;
Podczas korzystania z właściwości obiektu zamiast zmiennej, warto wiedzieć, że get
accessor wartości pośredniej nie jest tzw. Tylko accessor set
jest wywoływany dla wszystkich właściwości uzyskanych w sekwencji przydziału.
Weźmy na przykład klasę, która zapisuje na konsoli za każdym razem, gdy wywoływany jest akcesor get
i 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;
}
}
}
Będzie to wyjście
AccessorTest.Value.get 5
AccessorTest.Value.set 5
AccessorTest.Value.set 5
oznacza, że kompilator przydzieli wartość do wszystkich właściwości i nie będzie ponownie odczytać wartość za każdym razem jest on przypisany.
Wygląda dziwnie, ale działa!Dzięki;) – Alex
Po prostu przeczytaj to tak, jak się wydaje: num1 jest równe num2 co równa się 5 –
To wcale nie jest dziwne. Logika jest następująca: Operacja przypisania sama zwraca wartość, która jest wartością, która została przypisana. Sekwencja wykonania jest następująca: '' num1 = (num2 = 5) '' i pierwsze wykonane zadanie ('' num2 = 5'') zwraca wartość 5 do świata zewnętrznego, który z kolei jest przypisany do num1. Działa to ad infinitum ('' num0 = num1 = num2 = 5''). – Jpsy