Theo như tôi có thể nhớ, tôi luôn quản lý các thuộc tính danh sách của mình từ bên trong đối tượng, làm cho chúng chỉ đọc.
private IList<DateTime> _dates;
public MyClass() {
_dates = new List<DateTime>();
}
public IList<DateTime> Dates {
get {
return _dates;
}
}
Bằng cách đó, tôi đảm bảo rằng danh sách của tôi là không bao giờ null khi tôi truy cập vào nó, kể từ khi khách hàng không thể gán nó.
Tuy nhiên, ví dụ của bạn, bạn chỉ cần sử dụng phương pháp tiếp cận cũ nếu bạn cần một số loại logic khi nhận hoặc đặt thuộc tính. Nếu không, các thuộc tính tự động thực hiện chính xác như bạn muốn, chỉ nhận và thiết lập một giá trị cho một trường riêng. Hơn nữa, các { get; set; }
cải thiện khả năng đọc và giúp các lập trình viên khác hiểu ý định của bạn, theo quan điểm khiêm nhường của tôi.
Ví dụ:
public class MyClass {
private IList<DateTime> _dates;
public IList<DateTime> Dates {
get {
return _dates;
} set {
_dates = value;
}
}
}
so
public class MyClasse {
public IList<DateTime> Dates { get; set; }
}
Cách thứ hai làm cho nó gọn gàng hơn và mau lẹ hơn, ít nhất là với tôi, những gì mục đích là. Và nó trở nên nhanh hơn để mã hóa một lớp, khi không có logic bên trong getter và setter là cần thiết.
Nếu không, cái này không tốt hơn cái kia và hoàn toàn giống nhau, nói về việc nhận và đặt đơn giản giá trị của tài sản mà không có logic.
Quan trọng nhất, bạn cần phải thoải mái với mã của mình. Nếu nó kết thúc cho bạn không nhận được bất kỳ cải tiến, và bạn thích những gì bạn đang làm, hơn là chỉ làm điều đó. =)
thể trùng lặp của [C# 3.0 tự động tính - hữu ích hay không] (http://stackoverflow.com/questions/9304/c-sharp-3-0-auto- thuộc tính hữu ích hoặc không) – nawfal