Access Modifier trong C#
1. Modifier trong CSharp
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:
- private
- protected
- internal
- protected internal
- 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 |
Bạn có thể hiểu chi tiết hơn theo các ví dụ dưới đây:
3. private access modifier
private access modifier chỉ cho phép truy cập trong nội bộ một class.
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.
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:
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, ..).
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.
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ó.
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.
Sự khác biệt giữa override và new trong đã được giải thích trong tài liệu "Thừa kế và đa hình trong CSharp" bạn có thể xem tại:
Các hướng dẫn lập trình C#
- Thừa kế và đa hình trong C#
- Bắt đầu với C# cần những gì?
- Học nhanh C# cho người mới bắt đầu
- Cài đặt Visual Studio 2013 trên Windows
- Abstract class và Interface trong C#
- Cài đặt Visual Studio 2015 trên Windows
- Nén và giải nén trong C#
- Hướng dẫn lập trình đa luồng trong C#
- Hướng dẫn và ví dụ C# Delegate và Event
- Cài đặt AnkhSVN trên Windows
- Lập trình C# theo nhóm sử dụng Visual Studio và SVN
- Cài đặt .Net Framework
- Access Modifier trong C#
- Hướng dẫn và ví dụ C# String và StringBuilder
- Hướng dẫn và ví dụ C# Property
- Hướng dẫn và ví dụ C# Enum
- Hướng dẫn và ví dụ C# Structure
- Hướng dẫn và ví dụ C# Generics
- Hướng dẫn xử lý ngoại lệ trong C#
- Hướng dẫn và ví dụ Date Time trong C#
- Thao tác với tập tin và thư mục trong C#
- Hướng dẫn sử dụng Stream - luồng vào ra nhị phân trong C#
- Hướng dẫn sử dụng biểu thức chính quy trong C#
- Kết nối cơ sở dữ liệu SQL Server trong C#
- Làm việc với cơ sở dữ liệu SQL Server trong C#
- Kết nối cơ sở dữ liệu MySQL trong C#
- Làm việc với cơ sở dữ liệu MySQL trong C#
- Kết nối cơ sở dữ liệu Oracle trong C# không cần Oracle Client
- Làm việc với cơ sở dữ liệu Oracle trong C#
Show More