Trong CLR via CSharp chương 10 "Properties" Jeff Richter viết:Tại sao Thuộc tính được thực thi chậm hơn so với Thực thi Phương thức hoặc Phương thức?
phương phápMột tài sản có thể mất nhiều thời gian để thực hiện; Quyền truy cập của người dùng luôn luôn hoàn tất ngay lập tức. Một lý do phổ biến để sử dụng các thuộc tính là thực hiện đồng bộ hóa chuỗi, có thể dừng luồng vĩnh viễn, và do đó, không nên sử dụng thuộc tính nếu yêu cầu đồng bộ hóa . Trong tình huống đó, một phương pháp được ưa thích. Ngoài ra, nếu lớp học của bạn có thể được truy cập từ xa (ví dụ, lớp học của bạn có nguồn gốc từ System.MarshalByRefObject), gọi phương thức thuộc tính sẽ rất chậm và do đó, phương pháp được ưu tiên hơn là thuộc tính . Theo tôi, các lớp bắt nguồn từ MarshalByRefObject không bao giờ nên sử dụng các thuộc tính.
Đây có phải là trường hợp ngay cả khi thuộc tính được xác định để chỉ trả về trường riêng tư không? Tại sao một phương thức Phương thức được ưu tiên đồng bộ hóa? và tại sao Phương thức Phương pháp được ưu tiên hơn trong trường hợp MarshalByRefObject?
Để làm rõ câu hỏi của tôi:
Jeff dường như đang đưa ra tuyên bố về chăn rằng Thuộc tính không được khuyến khích và các phương pháp thích hợp hơn trong 2 trường hợp đó. như Joe White đã chỉ ra, các thuộc tính có thể có mã tùy ý. Nhưng các phương thức có thể chạy cùng một mã tùy ý. Đó là phần tôi gặp khó khăn. Có thực sự lợi thế trong việc sử dụng các phương thức trên các thuộc tính (cho cùng một mã được sử dụng) để đồng bộ hóa hoặc marshaling, hay liệu anh ta chỉ có một vấn đề với quy ước ngôn ngữ?
Điểm của Jeff là cuộc gọi phương thức "GetBlah" * liên lạc với người đọc * "điều này có thể chậm" và thuộc tính "Blah" giao tiếp "điều này gần như chắc chắn là nhanh". Vì vậy, nếu bạn sẽ làm cho một cái gì đó chậm, làm cho nó một phương pháp. Tôi không * hoàn toàn * đồng ý với lời khuyên này - ví dụ, tôi thường tạo ra các thuộc tính có các trường hợp xấu nhất * chậm nhất * nhưng có hiệu suất * phân bổ tuyệt vời *. Nhưng lời khuyên của Jeff chắc chắn là một điểm khởi đầu tốt; đi chệch khỏi nó một khi bạn biết những gì bạn đang làm. –