Modifier trong CSharp: private, protected, internal, protected internal, public Ngày đăng: 12:14 11/09/2022

Các access modifiers trong CSharp xác định độ truy cập (Phạm vi) vào dữ liệu của của các trường, phương thức, cấu tử (constructor) hoặc class.

Có 5 kiểu access modifiers trong CSharp:

  1. private
  2. protected
  3. internal
  4. protected internal
  5. public

2- Tổng quan về access modifier

Độ truy cập

(Modifier)

Mô tả

private

Truy cập bị hạn chế trong phạm vi của định nghĩa Class. Đây là loại phạm vi truy cập mặc định nếu không được chính thức chỉ định

protected

Truy cập bị giới hạn trong phạm vi định nghĩa của Class và bất kỳ các class con thừa kế từ class này.

internal

Truy cập bị giới hạn trong phạm vi Assembly của dự án hiện tại.

protected internal

Truy cập bị giới hạn trong phạm vi Assembly hiện tại và trong class định nghĩa hoặc các class con. 

public

Không có bất kỳ giới hạn nào khi truy cập vào các thành viên công khai (public)

Bảng minh họa dưới đây cho bạn cái nhìn tổng quan về cách sử dụng các access modifier.

  Cùng Assembly Khác Assembly
Trong class định nghĩa? Trong class con Ngoài class định nghĩa, ngoài class con Trong class con Ngoài class con
private Y        
protected Y Y   Y  
internal Y Y Y    
protected internal Y Y Y    
public Y Y Y Y Y

3- private access modifier

private access modifier chỉ cho phép truy cập trong nội bộ một class.

Modifier trong CSharp private protected internal protected internal public

Bạn không thể truy cập vào các thành viên private ở bên ngoài class định nghĩa thành viên đó. CSharp sẽ thông báo lỗi tại thời điểm biên dịch class.

Modifier trong CSharp private protected internal protected internal public

4- private constructor

Phương thức khởi tạo (constructor), phương thức (method), trường (field) đều được gọi là các thành viên trong class.

Nếu bạn tạo một class, và có một phương thức khởi tạo (constructor) có access modifier là private, bạn không thể tạo một đối tượng của class này từ private constructor đó từ bên ngoài class này. Hãy xem ví dụ minh họa:

Modifier trong CSharp private protected internal protected internal public

5- protected access modifier

protected access modifier có thể truy cập bên trong package, hoặc bên ngoài package nhưng phải thông qua tính kế thừa.

protected access modifier chỉ áp dụng cho field, method và constructor. Nó không thể áp dụng cho class (class, interface, ..).

Modifier trong CSharp private protected internal protected internal public

 

6- internal access modifier

internal là độ truy cập nội bộ, nó bị giới hạn trong một Assembly.

Một Assembly là chính là sản phẩm đã biên dịch của mã của bạn, thường là một DLL, nhưng EXE cũng có thể coi là một assembly. Nó là đơn vị nhỏ nhất của việc triển khai cho bất kỳ dự án .NET nào.

Assembly một cách cụ thể chứa mã .NET theo MSIL (Microsoft Intermediate language - Một ngôn ngữ trung gian) sẽ được biên dịch thành mã máy tính (Native code) ("JITted" - Được biên dịch bởi các trình biên dịch Just-In-Time) trong lần đầu tiên nó được thực thi trên máy tính,. Đó là mã đã được biên dịch cũng sẽ được lưu trữ trong Assembly và tái sử dụng cho các lần gọi tiếp theo.

7- protected internal access modifier

Độ truy cập protected internal là kết hợp giữa hai độ truy cập protected và internal, khi một thành viên của class có độ truy cập này, bạn chỉ có thể truy cập vào thành viên đó trong cùng class định nghĩa ra nó hoặc các class con và nằm trong cùng một Assembly.

8- public access modifier

public access modifier là mạnh mẽ nhất và có thể truy cập ở mọi nơi. Nó có phạm vi truy cập rộng nhất so với các modifier khác.

Modifier trong CSharp private protected internal protected internal public

9- Độ truy cập và thừa kế

 

Trong CSharp bạn có thể ghi đè (override) một phương thức (method) của class cha bởi một phương thức cùng tên cùng tham số, cùng kiểu trả về tại class con, tuy nhiên bạn không được phép thay đổi độ truy cập (access modifier) của nó.

Modifier trong CSharp private protected internal protected internal public

Tuy nhiên, bạn có thể tạo một phương thức cùng tên cùng tham số, cùng kiểu trả về nhưng khác độ truy cập nếu sử dụng từ khóa new, thực tế đây là một phương thức khác chẳng liên quan gì tới phương thức của class cha.

Modifier trong CSharp private protected internal protected internal public

Nguồn: https://openplanning.net/10439/csharp-access-modifiers