Tôi hiểu được nhiều lợi ích của việc cung cấp một giao diện để truy cập các thành viên của một lớp gián tiếp. Câu hỏi của tôi là: mà không phải là một cái gì đó đã bạn có thể thực tại chỉ là về bất kỳ ngôn ngữ OO sử dụng (một cái gì đó dọc theo dòng)Tại sao chúng ta sử dụng các thuộc tính .NET thay cho các hàm get/set cũ?
public int NormalClass::getQuality() {
return this->quality;
}
và
protected void NormalClass::setQuality(int q) {
this->quality = q;
}
?
Những lợi ích bổ sung nào mà thuộc tính .NET cung cấp, ngoài tính thẩm mỹ tuyệt đối?
Tôi sẽ chấp nhận "khả năng đọc" nếu bạn có thể đưa ra một đối số hấp dẫn cho nó; nhưng cá nhân, tôi nghiêng để nghĩ rằng một get/set chức năng là dễ đọc hơn một tài sản vì nó là rõ ràng một chức năng như trái ngược với một giá trị thẳng lên.
EDIT: Cảm ơn mọi người đã trả lời! Điều này thực sự mang tính thông tin cho tôi; để tổng hợp những gì tôi đã thu thập/học được từ tất cả những gì đã nói, sau đây là một vài kết luận tôi đã đạt đến cho đến nay:
- Những lợi ích lớn nhất của tính đến không phải từ các tính năng cụ thể của tính bản thân, nhưng thay vào đó là từ các tính năng của khung công tác và tính năng IDE mà xử lý các thuộc tính theo cách đặc biệt; ví dụ: trình chỉnh sửa Thuộc tính, chuỗi tuần tự hóa XML , ràng buộc dữ liệu.
- Thuộc tính có thể được điều trị giá trị như đơn giản trong một số cách thuận tiện rằng có được chức năng/bộ không thể: trong Đặc biệt, obj.Prop ++ và obj.Prop = giá trị.
- Các thuộc tính cho phép bạn lấy đi bằng mã nhanh chóng và bẩn bằng cách sử dụng thành viên công khai mà không phải thông qua các chức năng get/set sau này; nếu bạn cần phải thêm một số logic và/hoặc đặt thành viên công khai ở chế độ riêng tư, , bạn có thể chỉ cần giới thiệu thuộc tính và không có nguy cơ vi phạm bất kỳ mã cũ nào.
Bây giờ, có một điểm được thực hiện trong 2 hoặc 3 câu trả lời cho đến nay cá nhân tôi thấy hơi mơ hồ: các thuộc tính đó ngụ ý các hoạt động đọc/ghi rẻ tiền và do đó có thể được sử dụng theo cách giống như biến đơn giản. Vấn đề của tôi với điểm này là không có gì vốn có trong các thuộc tính thực sự thực thi điều này; nó chỉ đơn giản là cách chúng được giả sử là để sử dụng. Đối với tôi, điều này tương tự với vòng loại "shouldBePrivate" cho biết giá trị nên chỉ được truy cập trực tiếp bởi lớp của riêng nó, nhưng vẫn có thể truy cập được từ bên ngoài; hoặc một lực lượng cảnh sát tuần tra các đường phố để nhắc nhở chúng tôi rằng chúng tôi nên hành xử, nhưng không thực sự can thiệp khi chúng tôi bắt đầu phạm tội (nếu nó không được thực thi, nó thực sự làm gì cho chúng ta?).
Tôi sẽ bị ấn tượng hơn bởi thời điểm này nếu các thuộc tính có một số loại cơ chế tích hợp để đảm bảo tính giá rẻ đọc/ghi.
... chỉ vì bạn có thể, hehe –
"nếu thuộc tính có một số cơ chế tích hợp để đảm bảo đọc/ghi giá rẻ" - Điều đó giống như nói "nó sẽ tốt hơn nếu [GUI yêu thích của bạn khuôn khổ] có một số loại cơ chế tích hợp để đảm bảo rằng mọi người không viết giao diện người dùng xấu ". Than ôi, cơ chế duy nhất cho điều đó được gọi là "lập trình viên". (Hoặc nhà thiết kế, hoặc nghiên cứu khả năng sử dụng, hoặc bất cứ điều gì.) Trình biên dịch có thể giúp bạn ra ngoài, nhưng bạn phải chịu trách nhiệm về việc không viết mã xấu. –
Joe, tôi nghĩ đó là điểm cơ bản của tôi: rằng việc sử dụng các thuộc tính cho mỗi lần KHÔNG THỂ đảm bảo việc đọc/ghi không tốn kém. Đây là trách nhiệm của lập trình viên. Tôi không tranh luận rằng đó là một ý tưởng tốt cho khuôn khổ để có một stanard, cách tiếp cận xác nhận cho việc thực hiện các thuộc tính truy cập nhanh; thay vào đó, tôi đang đặt câu hỏi cho những câu trả lời đã chỉ ra tính năng thực tế này của các thuộc tính như một lợi ích chức năng, như thể đó là một số tính năng đặc biệt mà các nhà phát triển .NET đã làm việc chăm chỉ để cung cấp. –