Nó đơn giản như:
num1 = num2 = 5;
Khi sử dụng một thuộc tính đối tượng thay vì biến, thật thú vị khi biết rằng trình truy cập get
của giá trị trung gian không được gọi. Chỉ người set
truy cập được gọi cho tất cả các thuộc tính được truy cập trong chuỗi gán.
Lấy ví dụ một lớp ghi vào bàn điều khiển mỗi khi trình truy cập get
và trình truy cập set
được gọi.
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;
}
}
}
Điều này sẽ xuất
AccessorTest.Value.get 5
AccessorTest.Value.set 5
AccessorTest.Value.set 5
Có nghĩa là trình biên dịch sẽ gán giá trị cho tất cả các thuộc tính và nó sẽ không đọc lại giá trị mỗi khi nó được gán.
num1 = (num2 = 5)
và phép gán đầu tiên được thực thi (num2 = 5
) trả về giá trị 5 cho thế giới bên ngoài - lần lượt được gán cho num1. Điều này hoạt động quảng cáo infinitum (num0 = num1 = num2 = 5
).