Tôi sẽ tiến thêm một bước, và đưa nó đến 3 trường hợp. Mặc dù có nhiều biến thể trên mỗi loại, đây là quy tắc tôi sử dụng phần lớn thời gian khi lập trình C #.
Trong trường hợp 2 & 3, luôn luôn đi đến Trình truy cập thuộc tính (không phải biến trường). Và trong trường hợp 1, bạn được cứu khỏi thậm chí phải đưa ra lựa chọn này.
1.) Tài sản bất biến (được chuyển cho nhà xây dựng, hoặc được tạo tại thời điểm xây dựng). Trong trường hợp này, tôi sử dụng một biến trường, với thuộc tính chỉ đọc. Tôi chọn cái này trên một setter riêng, vì setter riêng không đảm bảo tính bất biến.
public class Abc
{
private readonly int foo;
public Abc(int fooToUse){
foo = fooToUse;
}
public int Foo { get{ return foo; } }
}
2.) Biến POCO. Một biến đơn giản có thể nhận / đặt ở bất kỳ phạm vi công khai / riêng tư nào. Trong trường hợp này tôi sẽ chỉ sử dụng một tài sản tự động.
public class Abc
{
public int Foo {get; set;}
}
3.) Thuộc tính ràng buộc ViewModel. Đối với các lớp hỗ trợ INotifyPropertyChanged, tôi nghĩ bạn cần một biến trường sao lưu riêng tư.
public class Abc : INotifyPropertyChanged
{
private int foo;
public int Foo
{
get { return foo; }
set { foo = value; OnPropertyChanged("foo"); }
}
}