Câu hỏi hay. Mặc dù một thuộc tính ít hơn đường cú pháp cho một cặp phương thức get/set, có hai phương thức nên được sử dụng trong các thời điểm khác nhau.
Nói chung, bạn nên sử dụng một getter sở hữu kiểu khi:
- Giá trị để được trả lại đại diện cho dữ liệu hiện trường giống như (nói chung Primitives/loại giá trị, nhưng một tham chiếu đến một đối tượng miền cũng là tốt)
- việc tính toán, nếu có, để tạo ra giá trị đó là tương đối rẻ/tác dụng phụ miễn phí
- Lấy giá trị tương tự hai lần sẽ tạo ra giá trị tương tự cho đầu vào cùng
Nói chung, bạn nên sử dụng phương thức getter khi:
- Đối tượng trả về được tạo cho mục đích (ví dụ: phương pháp nhà máy)
- Đánh giá giá trị trả lại yêu cầu các tác dụng phụ (ví dụ: chạm vào hệ thống tệp, cơ sở dữ liệu hoặc thay đổi các giá trị khác)
- Nhận kiểu trả về hai lần sẽ tạo ra hai kết quả riêng biệt. .
Trong một câu, nếu nói khái niệm giá trị cần thiết là một thứ mà đối tượng CÓ, hãy sử dụng một thuộc tính. Nếu giá trị cần thiết là kết quả của một đối tượng nào đó, sử dụng một phương thức.
Điều đó nói rằng thật tệ khi có các thuộc tính trả về mảng. Ai có thể xây dựng trên * tại sao * đó là xấu? –
Bởi vì nội dung của mảng có thể được thay đổi thành bất kỳ giá trị phòng hộ nào bởi bất kỳ ai có thể tham chiếu đến nó: http://blogs.msdn.com/b/ericlippert/archive/2008/09/22/arrays-considered- some-toxic.aspx – thecoop
Nếu bạn trả về một mảng từ một thuộc tính, bạn thực sự trả về một con trỏ tới mảng đó. Điều này có nghĩa là bạn đã đột nhiên tạo nó để mã khác có thể sửa đổi mảng của bạn, ngay cả khi bạn không cung cấp phương thức setter. Vì vậy, nội dung của mảng của bạn có thể được thay đổi mà bạn không biết. – GendoIkari