C# - C Sharp: Các mức khả năng truy cập
Ta sử dụng các bổ từ truy cập public
, protected
, internal
, hoặc private
để chỉ định một trong các mứa khả năng truy cập được khai báo sau đây cho các thành phần (member).
Khả năng truy cập | Giải nghĩa |
---|---|
public | Quyền truy cập không bị hạn chế. |
protected | Chỉ truy cập được ở lớp chứa hoặc các lớp dẫn xuất (thừa kế) từ lớp chứa. |
internal | Chỉ truy cập được ở assembly hiện tại. |
protected internal | Chỉ truy cập được ở assembly hiện tại hoặc lớp chứa và các lớp dẫn xuất từ lớp chứa. |
private | Chỉ truy cập được ở lớp chứa. |
private protected | Chỉ truy cập được ở lớp chứa hoặc các lớp dẫn xuất từ lớp chứa nhưng trong assembly hiện thời. Áp dụng từ C# 7.2. |
Mỗi member hoặc kiểu chỉ có một bổ từ truy cập, trừ trường hợp bạn dùng protected internal
hoặc private protected
.
Không được dùng bổ từ truy cập cho các namespace. Namespace không giới hạn mức độ truy cập.
Tùy thuộc vào ngữ cảnh khai báo member, chỉ một số khả năng truy cập được khai báo mới được phép. Nếu không có bổ từ truy cập nào được chỉ định khi khai báo member thì mức truy cập mặc định sẽ được sử dụng.
Các kiểu cấp cao nhất không được đặt lồng trong các kiểu khác, chỉ có mức khả năng truy cập là internal
hoặc public
. Khả năng truy cập mặc định cho những kiểu này là internal
.
Đối với các kiểu lồng nhau là thành viên của các kiểu khác thì có thể có các khả năng truy cập được khai báo được chỉ ra trong bảng dưới đây.
Member | Khả năng truy cập mặc định | Khả năng truy cập được khai báo của member |
---|---|---|
enum |
public |
None |
class |
private |
public protected internal private protected internal private protected |
interface |
public |
public protected internal private *protected internal private protected |
struct |
private |
public internal private |
* Đối với member interface
với khả năng truy cập là private
thì phải có sự thực thi mặc định.
Khả năng truy cập của một kiểu lồng phụ thuộc vào "miền trợ năng" của nó, được xác định bởi khả năng truy cập được khai báo của member và miền trợ năng của kiểu chứa trực tiếp. Tuy nhiên, miền trợ năng của một kiểu lồng không được vượt quá miền của kiểu chứa.