Bảng Tổng Hợp Phạm Vi Tiếp Cận
| Bộ điều khiển | Lớp hiện tại | Cùng Assembly | Lớp dẫn xuất (cùng Assembly) | Lớp dẫn xuất (khác Assembly) | Assembly ngoài |
|---|---|---|---|---|---|
| private | ✅ | ❌ | ❌ | ❌ | ❌ |
| protected | ✅ | ❌ | ✅ | ✅ | ❌ |
| internal | ✅ | ✅ | ✅ | ✅ | ❌ |
| protected internal | ✅ | ✅ | ✅ | ✅ | ❌ |
| (⚠ Bắt buộc là lớp dẫn xuất để khác Assembly) | |||||
| private protected | ✅ | ✅ | ✅ | ❌ | ❌ |
Nguyên Tắc Hoạt Động Cốt Lõi
- private: Chỉ thành viên trực tiếp thuộc khối lệnh hoặc lớp sở hữu mới được phép tham chiếu.
- internal: Mở khóa quyền truy cập cho mọi file mã nguồn nằm chung một biên dịch unit (DLL/EXE).
- protected: Cấp quyền cho các lớp thừa kế kế vị, không phân biệt vị trí assembly.
- protected internal: Áp dụng toán tử logic OR. Thành viên sẽ khả dụng nếu thỏa mãn: cùng assembly HOẶC là lớp con dù nằm ở assembly độc lập.
- private protected: Ràng buộc chặt chẽ hơn trong hệ thống phân cấp. Chỉ cho phép lớp con trong cùng assembly đọc/ghi, ngăn chặn hoàn toàn việc tiếp cận từ solution khác.
Kịch Bản Áp Dụng Thực Tế Và Đoạn Mã Minh Họa
1. private (Giới Hạn Nghiêm Ngặt Nhất)
Xây dựng khi ẩn đi chi tiết triển khai nội bộ, biến trạng thái tạm thời hoặc các hàm utility cục bộ không nên暴露 vào public contract.
private void ConfigureConnectionTimeout(int milliseconds)
{
// Logic chuẩn bị tài nguyên ngầm
}
2. internal (Giao Diện Chia Sẻ Nội Bộ Module)
Lý tưởng cho kiến trúc nhiều lớp, nơi các helper class cần liên lạc với nhau nhưng bị cấm truy xuất từ chương trình khách hàng.
internal sealed class SerializationPipeline
{
// Điều hướng chuyển đổi định dạng dữ liệu nội bộ
}
3. protected (Khung Mở Rộng Cho Thành Phần Kế Thừa)
Dùng khi xây dựng thư viện nền tảng mà bạn muốn developer bên thứ ba can thiệp hành vi mặc định thông qua override, nhưng giữ kín khỏi đối tượng khởi tạo thông thường.
protected virtual void ExecuteValidationRule(object payload)
{
// Hook cho phép ghi đè logic kiểm tra tính hợp lệ
}
4. protected internal (Cổng Giao Tiếp Đa Chiều)
Mẫu thiết kế tiêu chuẩn trong các framework UI như WPF. Giúp hệ thống vừa bảo mật core API, vừa tạo khe hở có kiểm soát để lập trình viên kế thừa và bổ sung functionality ở project tách rời.
protected internal void DispatchBackgroundWorker(string workerId)
{
// Phối hợp tiến trình chạy nền có thể gọi từ assembly con
}
5. private protected (Hành Lang Kế Thừa Nội Tuyến)
Rất hiệu quả cho plugin architecture hoặc component tree yêu cầu quan hệ cha-con rõ ràng nhưng tuyệt đối chặn việc extend từ các assembly lân cận.
private protected decimal CalculateAdjustedMargin(float rawValue)
{
return rawValue * 1.15m;
}
Mức Độ Sử Dụng Trong Dự Án Nghiệp Vụ
| Level | Vai Trò Kiến Trúc | Tần Suất Xuất Hiện |
|---|---|---|
| public | Giao diện công khai (Public API Surface) | Cao |
| internal | Chia sẻ resource giữa các module trong cùng package | Rất Cao |
| protected | Điểm neo để kế thừa và ghi đè method | Cao |
| protected internal | Cung cấp extension points an toàn cho library bên thứ ba | Trung Bình |
| private protected | Gating access cho inheritance chain nội bộ | Thấp - Trung Bình |
| private | Implementation chi tiết, local helpers | Rất Cao |