Vậy tại sao tạo một lớp lồng nhau?
Tôi có thể nghĩ ra vài lý do quan trọng:
1. Kích hoạt đóng gói
Nhiều lần các lớp lồng nhau là chi tiết thực hiện của lớp. Người dùng của lớp chính không cần phải quan tâm đến sự tồn tại của họ. Bạn sẽ có thể thay đổi chúng theo ý muốn mà không yêu cầu người dùng của lớp chính thay đổi mã của họ.
2. Tránh ô nhiễm tên
Bạn không nên thêm các loại, biến, hàm, v.v. trong một phạm vi trừ khi chúng phù hợp trong phạm vi đó. Điều này khác hoàn toàn so với đóng gói. Có thể hữu ích để hiển thị giao diện của loại lồng nhau nhưng vị trí thích hợp cho loại lồng vẫn là lớp chính. Trong vùng đất C ++, các kiểu lặp là một ví dụ như vậy. Tôi không có kinh nghiệm về C # đủ để cung cấp cho bạn các ví dụ riêng biệt trong đó.
Chúng ta hãy tạo một ví dụ đơn giản để minh họa tại sao việc di chuyển một lớp lồng vào cùng phạm vi với lớp chính là ô nhiễm tên. Giả sử bạn đang thực hiện một lớp danh sách liên kết. Thông thường, bạn sẽ sử dụng
publid class LinkedList
{
class Node { ... }
// Use Node to implement the LinkedList class.
}
Nếu bạn quyết định chuyển Nodelên cùng phạm vi LinkedList, bạn sẽ có
public class LinkedListNode
{
}
public class LinkedList
{
// Use LinkedListNode to implement the class
}
LinkedListNodedường như không hữu ích nếu không có LinkedListlớp học. Ngay cả khi LinkedListđược cung cấp một số chức năng truy xuất lại một LinkedListNodeđối tượng mà người dùng LinkedListcó thể sử dụng, nó vẫn LinkedListNodechỉ hữu ích khi LinkedListđược sử dụng. Vì lý do đó, làm cho lớp "nút" trở thành lớp ngang hàng LinkedListđang làm ô nhiễm phạm vi chứa.