Trong ví dụ của bạn nó làm cho các thuộc tính như chỉ đọc, nhưng có những công dụng khác nữa.
public string Text { get { return _text; } }
Nếu bạn muốn làm một số hoạt động trong nội bộ trên return_text
và sau đó trả lại chống lại proeperty Text
bạn có thể một cái gì đó như thế nào.
public string Text { get { return _text.ToUpper(); } }
Đây là lĩnh vực Encapsulation
Encapsulation đôi khi được gọi là trụ cột đầu tiên hoặc nguyên tắc lập trình hướng đối tượng. Theo nguyên tắc của đóng gói, một lớp hoặc cấu trúc có thể chỉ định cách truy cập của mỗi thành viên là mã bên ngoài lớp hoặc cấu trúc. Phương pháp và các biến không được dự định được sử dụng từ bên ngoài lớp hoặc lắp ráp có thể được ẩn để giới hạn khả năng xảy ra lỗi mã hóa hoặc khai thác độc hại.
Hãy xem xét ví dụ sau:
// private field
private DateTime date;
// Public property exposes date field safely.
public DateTime Date
{
get
{
return date;
}
set
{
// Set some reasonable boundaries for likely birth dates.
if (value.Year > 1900 && value.Year <= DateTime.Today.Year)
{
date = value;
}
else
throw new ArgumentOutOfRangeException();
}
}
Trong ví dụ này có một lĩnh vực tư nhân date
được tiếp xúc công khai thông qua sở hữu Date
. Bây giờ nếu bạn muốn thiết lập ranh giới cho ngày thì bạn có thể thấy phần thiết lập của thuộc tính.
Lưu ý rằng bạn nên * rất, rất cẩn thận * khi phơi bày một mảng dưới dạng thuộc tính chỉ đọc của một lớp. ** Tham chiếu mảng chỉ đọc nhưng nội dung mảng không. ** Người dùng của lớp này có thể thay đổi nội dung của mảng theo ý muốn. Nếu đó không phải là mong muốn sau đó thay vì trả về một 'ReadOnlyCollection', không phải là một 'chuỗi []'. –
Những suy nghĩ chi tiết của Eric về chủ đề này: http://blogs.msdn.com/b/ericlippert/archive/2008/09/22/arrays-considered-somewhat-harmful.aspx – SolutionYogi