CẬP NHẬT: Câu hỏi này là chủ đề của blog của tôi vào tháng 9 năm 2014 . Cảm ơn vì câu hỏi tuyệt vời của bạn!
Có một cuộc tranh luận đáng kể về câu hỏi này ngay cả trong chính nhóm biên dịch.
Trước hết, thật khôn ngoan khi hiểu các quy tắc. Một thành viên công khai của một lớp hoặc struct là một thành viên có thể truy cập được vào bất cứ thứ gì có thể truy cập vào kiểu chứa . Vì vậy, một thành viên của một lớp nội bộ có hiệu quả nội bộ.
Vì vậy, bây giờ, với một lớp nội bộ, các thành viên của nó mà bạn muốn truy cập trong hội đồng nên được đánh dấu là công khai hay nội bộ?
Ý kiến của tôi là: đánh dấu các thành viên như công chúng.
Tôi sử dụng "công khai" có nghĩa là "thành viên này không phải là một chi tiết thực hiện". Một thành viên được bảo vệ là một chi tiết thực hiện; có một cái gì đó về nó sẽ là cần thiết để làm cho một lớp dẫn xuất hoạt động. Một thành viên nội bộ là một chi tiết thực hiện; một cái gì đó khác bên trong hội đồng này cần thành viên để hoạt động chính xác. Một thành viên công cộng cho biết "thành viên này đại diện cho khóa, chức năng tài liệu được cung cấp bởi đối tượng này."
Về cơ bản, thái độ của tôi là: giả sử tôi quyết định biến lớp nội bộ này thành một lớp công khai. Để làm điều đó, tôi muốn thay đổi chính xác một điều : khả năng tiếp cận của lớp. Nếu biến một lớp nội bộ thành một lớp công khai có nghĩa là tôi cũng phải biến một thành viên nội bộ thành một thành viên công cộng, thì thành viên đó là một phần của khu vực công cộng của lớp, và nó phải được công khai ngay từ đầu.
Người khác không đồng ý. Có một đội ngũ nói rằng họ muốn có thể liếc qua tuyên bố của một thành viên và ngay lập tức biết liệu nó sẽ được gọi chỉ từ mã nội bộ.
Thật không may, điều đó không phải lúc nào cũng diễn ra tốt đẹp; ví dụ, một lớp bên trong thực hiện giao diện nội bộ vẫn phải có các thành viên triển khai được đánh dấu là công khai, bởi vì chúng là một phần của bề mặt công khai của lớp .