Các loại lồng nhau trong C# có khả năng truy cập các thuộc tính riêng của cha mẹ. Có lý do cụ thể nào để có tính năng ngôn ngữ này không? Theo ý kiến của tôi, điều này phá vỡ đóng gói. Nếu tôi làm cho kiểu lồng nhau được công khai, thì tôi sẽ có thể phơi bày các thuộc tính riêng của lớp cha thông qua nó.Truy cập vào các thuộc tính riêng của cha mẹ thông qua các loại lồng nhau trong C#
Trả lời
Bạn sẽ có thể - nhưng bạn chỉ có thể lồng lớp nếu bạn đã có nó trong cùng một tệp nguồn như lớp bên ngoài ở địa điểm đầu tiên.
Hiệu quả lớp lồng nhau được "sở hữu" bởi lớp bên ngoài và được tin cậy ở mức độ tương tự như bất kỳ thành viên nào khác của lớp bên ngoài. Một phương thức trong lớp ngoài có thể phơi bày một thuộc tính riêng - nhưng bạn không tin nó, bởi vì bạn sở hữu tất cả mã đó. Tương tự như vậy bạn (tác giả của lớp bên ngoài) sở hữu tất cả mã của một lớp lồng nhau. Nếu bạn không muốn phá vỡ đóng gói trong lớp lồng nhau, chỉ cần tránh viết mã có thể phá vỡ đóng gói :)
Tôi tự hào về thực tế là tôi đăng cùng một điều như @Jon Skeet, mặc dù hơi ít hùng hồn, chỉ 38 giây sau :) –
Cảm ơn Jon. Điều đó xóa mọi thứ. Phần buồn cười là, tôi đã có câu hỏi sau khi đọc một đoạn mã từ cuốn sách của bạn. – Amrit
Tôi nghĩ bạn cũng có thể chia lớp ngoài thành hai tệp nguồn thông qua các lớp một phần và có một trong các tệp nguồn chỉ chứa lớp lồng nhau và tệp nguồn khác chứa mọi thứ khác. Đây là loại lạm dụng các lớp học một phần; Tôi khuyên bạn không nên làm điều đó. – Brian
Lớp lồng nhau là một phần của lớp kèm theo, giống như phương thức. Việc phơi bày các thuộc tính riêng thông qua chúng không phá vỡ sự đóng gói nào ngoài việc phơi bày các thuộc tính riêng thông qua các phương thức.
Mô hình mà C# sử dụng để kiểm soát truy cập là bạn có thể truy cập bất kỳ thứ gì bạn muốn trong lớp bạn đang xác định và thật khó để xem cách thức hoạt động của nó.
(IMO) Loại lồng nhau là một phần của loại bao quanh và vì vậy nó phải có quyền truy cập vào các thành viên private
- giống như bất kỳ phần nào khác thuộc loại đó.
Cũng giống như nếu bạn thực hiện bất kỳ phần nào khác của loại public
, điều đó cũng có thể hiển thị thuộc tính riêng tư của loại.
Vì chỉ người đã viết kiểu kèm theo mới có thể viết loại lồng nhau, không có rủi ro thực sự?
- 1. cách truy cập vào các thành viên riêng tư của lớp lồng nhau?
- 2. Thông báo cập nhật liên kết WPF cho thuộc tính lồng nhau khi thuộc tính cha mẹ thay đổi
- 3. Truy cập các thuộc tính lớp con thông qua hàm trong lớp cha
- 4. Jackson: Bỏ qua các thuộc tính lớp cha mẹ
- 5. Lớp lồng nhau Các phương thức truy cập cho các thuộc tính trong .NET
- 6. Lấy các khóa cha mẹ từ từ điển lồng nhau
- 7. Phần tử XPath chứa thuộc tính và cha mẹ của cha mẹ có thuộc tính khác
- 8. Các biểu mẫu lồng nhau trong đường ray - thuộc tính truy cập trong quan hệ has_many
- 9. Các lớp lồng nhau riêng
- 10. Truy cập các thuộc tính trang chính trên cùng trong mã trang chủ lồng nhau đằng sau
- 11. Cách truy cập thông số lồng nhau
- 12. WPF ràng buộc thuộc tính của usercontrol vào thuộc tính của cha mẹ
- 13. Làm cách nào để truy cập các thuộc tính lớp của lớp cha trong Python?
- 14. Các thuộc tính kế thừa Maven từ cha mẹ POM
- 15. ReflectionClass :: getProperties() cũng có thuộc tính của cha mẹ?
- 16. Mongoose.js: Cập nhật nguyên tử của thuộc tính lồng nhau?
- 17. python - truy cập vào lớp cha thuộc tính
- 18. Thừa kế các thuộc tính từ cha mẹ pom
- 19. Không thể truy cập vào một thành viên không tĩnh của loại hình ngoài thông qua kiểu lồng nhau
- 20. Truy cập vào các thành viên riêng của một Superclass
- 21. Mẫu C++ Crazy - Một mẫu để truy cập các thuộc tính riêng lẻ của một lớp
- 22. Truy cập thông báo lỗi cho trường thuộc tính lồng nhau
- 23. Truy cập thuộc tính trang cha mẹ từ điều khiển người dùng
- 24. Truy nhập đệ quy thông qua các thuộc tính cũng như truy cập chỉ mục?
- 25. Mục tiêu-C: truy cập các thuộc tính riêng trong lớp thừa kế
- 26. jquery - cách đặt thuộc tính cha mẹ?
- 27. force get/set truy cập các biến riêng tư cho các thuộc tính riêng
- 28. Các loại lồng nhau được công khai
- 29. Handlebars.js: Làm thế nào để truy cập vào chỉ mục cha trong lồng nhau?
- 30. Lặp lại thông qua các đối tượng JavaScript lồng nhau
Có vô số khả năng thiết kế xấu; không có gì buộc bạn phải sử dụng chúng mặc dù. –