C # - Đóng gói
Encapsulationđược định nghĩa 'là quá trình bao bọc một hoặc nhiều mục trong một gói vật lý hoặc lôgic'. Tính đóng gói, trong phương pháp luận lập trình hướng đối tượng, ngăn cản quyền truy cập vào các chi tiết triển khai.
Tính trừu tượng và tính đóng gói là các tính năng liên quan trong lập trình hướng đối tượng. Tính trừu tượng cho phép hiển thị thông tin liên quan và tính đóng gói cho phép lập trình viên thực hiện mức độ trừu tượng mong muốn .
Đóng gói được thực hiện bằng cách sử dụng access specifiers. Anaccess specifierxác định phạm vi và khả năng hiển thị của một thành viên trong lớp. C # hỗ trợ các chỉ định truy cập sau:
- Public
- Private
- Protected
- Internal
- Được bảo vệ bên trong
Công cụ xác định quyền truy cập công khai
Bộ chỉ định truy cập công khai cho phép một lớp hiển thị các biến thành viên và các hàm thành viên của nó với các hàm và đối tượng khác. Mọi thành viên công cộng có thể được truy cập từ bên ngoài lớp.
Ví dụ sau minh họa điều này -
using System;
namespace RectangleApplication {
class Rectangle {
//member variables
public double length;
public double width;
public double GetArea() {
return length * width;
}
public void Display() {
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}//end class Rectangle
class ExecuteRectangle {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.length = 4.5;
r.width = 3.5;
r.Display();
Console.ReadLine();
}
}
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
Length: 4.5
Width: 3.5
Area: 15.75
Trong ví dụ trước, các biến thành viên chiều dài và chiều rộng được khai báo public, vì vậy chúng có thể được truy cập từ hàm Main () bằng cách sử dụng một thể hiện của lớp Rectangle, có tên r.
Hàm thành viên Display () và GetArea () cũng có thể truy cập trực tiếp các biến này mà không cần sử dụng bất kỳ thể hiện nào của lớp.
Các hàm thành viên Display () cũng được khai báopublic, vì vậy nó cũng có thể được truy cập từ Main () bằng cách sử dụng một thể hiện của lớp Rectangle, có tênr.
Bộ chỉ định quyền truy cập riêng tư
Bộ xác định quyền truy cập riêng tư cho phép một lớp ẩn các biến thành viên và các hàm thành viên của nó khỏi các hàm và đối tượng khác. Chỉ các hàm của cùng một lớp mới có thể truy cập các thành viên riêng của nó. Ngay cả một thể hiện của một lớp cũng không thể truy cập các thành viên riêng tư của nó.
Ví dụ sau minh họa điều này -
using System;
namespace RectangleApplication {
class Rectangle {
//member variables
private double length;
private double width;
public void Acceptdetails() {
Console.WriteLine("Enter Length: ");
length = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter Width: ");
width = Convert.ToDouble(Console.ReadLine());
}
public double GetArea() {
return length * width;
}
public void Display() {
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}//end class Rectangle
class ExecuteRectangle {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.Acceptdetails();
r.Display();
Console.ReadLine();
}
}
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
Enter Length:
4.4
Enter Width:
3.3
Length: 4.4
Width: 3.3
Area: 14.52
Trong ví dụ trước, các biến thành viên chiều dài và chiều rộng được khai báo private, vì vậy chúng không thể được truy cập từ hàm Main (). Các hàm thành viên AcceptDetails () và Display () có thể truy cập các biến này. Vì các hàm thành viên AcceptDetails () và Display () được khai báopublic, chúng có thể được truy cập từ Main () bằng cách sử dụng một thể hiện của lớp Rectangle, có tênr.
Bộ chỉ định quyền truy cập được bảo vệ
Bộ chỉ định truy cập được bảo vệ cho phép một lớp con truy cập các biến thành viên và các hàm thành viên của lớp cơ sở của nó. Bằng cách này, nó giúp thực hiện kế thừa. Chúng ta sẽ thảo luận chi tiết hơn về vấn đề này trong chương kế thừa.
Bộ định danh quyền truy cập nội bộ
Bộ chỉ định truy cập nội bộ cho phép một lớp hiển thị các biến thành viên và các hàm thành viên của nó với các hàm và đối tượng khác trong hợp ngữ hiện tại. Nói cách khác, bất kỳ thành viên nào có chỉ định truy cập nội bộ đều có thể được truy cập từ bất kỳ lớp hoặc phương thức nào được xác định trong ứng dụng mà thành viên đó được xác định.
Chương trình sau đây minh họa điều này -
using System;
namespace RectangleApplication {
class Rectangle {
//member variables
internal double length;
internal double width;
double GetArea() {
return length * width;
}
public void Display() {
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}//end class Rectangle
class ExecuteRectangle {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.length = 4.5;
r.width = 3.5;
r.Display();
Console.ReadLine();
}
}
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
Length: 4.5
Width: 3.5
Area: 15.75
Trong ví dụ trước, lưu ý rằng hàm thành viên GetArea () không được khai báo với bất kỳ mã xác định quyền truy cập nào. Sau đó, chỉ định truy cập mặc định của một thành viên lớp sẽ là gì nếu chúng ta không đề cập đến bất kỳ? Nó làprivate.
Bộ chỉ định quyền truy cập nội bộ được bảo vệ
Bộ xác định quyền truy cập nội bộ được bảo vệ cho phép một lớp ẩn các biến thành viên và hàm thành viên của nó khỏi các đối tượng và chức năng của lớp khác, ngoại trừ một lớp con trong cùng một ứng dụng. Điều này cũng được sử dụng trong khi thực hiện kế thừa.