2011-01-12 32 views
17

Có một số thư viện .NET sử dụng phương pháp truy cập dữ liệu đối tượng thay vì getters tức là HttpWebResponse.GetResponseStream().Khi nào sử dụng phương thức GetXXX() và khi thuộc tính Getter

Cũng có các ví dụ về cách truy cập luồng theo thuộc tính tức là HttpResponse.OutputStream.

Câu hỏi của tôi là khi nào nên sử dụng hình thức truy cập nào và tại sao?

Trả lời

9
+0

Đ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? –

+1

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

+0

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

1

Ý kiến ​​của tôi, tôi chắc chắn, sẽ nhận được đến -10 thật nhanh, là bạn chỉ nên sử dụng các thuộc tính cho tuần tự hóa. Trong tất cả các trường hợp khác, lời gọi phương thức rõ ràng là thích hợp hơn vì khi bạn nhìn vào nó, bạn biết rằng một phương thức có các hiệu ứng phụ có thể đang được gọi.

Tôi đoán câu trả lời "đúng" (tm) là khi tất cả phương pháp của bạn sẽ trả về giá trị, bạn có thể sử dụng getter/setter, nhưng nếu có bất kỳ công việc nào, hãy sử dụng phương pháp.

+3

Tài sản Getters nên ** không bao giờ bao giờ ** có tác dụng phụ, nếu bạn có tác dụng phụ tôi đồng ý sử dụng một phương pháp thay thế. – BrokenGlass

+0

Một chút đơn giản. Các thuộc tính không phải là một mục đích duy nhất; chúng cho phép bạn thực hiện các thao tác yêu cầu công việc giống như các phép/truy vấn đơn giản, tránh các phương thức cho một số dữ liệu và trường cho người khác (và giảm độ phức tạp của việc tái cấu trúc các trường sử dụng công việc nội bộ để xử lý). – KeithS

3

Câu hỏi hay. This bài viết mang đến một vài điểm tốt. Nói chung, tôi sử dụng các phương pháp khi tính toán là tốn kém và tính chất khi tính toán không đắt (tức là một giá trị được lưu trữ được trả về).

8

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.

Các vấn đề liên quan