-
Notifications
You must be signed in to change notification settings - Fork 0
Encapsulation (Đóng gói)
-
Các biến có phạm vi truy cập là
privatechỉ có thể truy cập được trong cùng một lớp (lớp bên ngoài không thể truy cập vào nó). Tuy nhiên, đôi khi chúng ta vẫn cần truy cập chúng và điều này sẽ được thực hiện bằng các thuộc tính. -
Thuộc tính trông giống như sự kết hợp giữa một biến và một phương thức, nó có hai phương thức là
getvàset -
Ví dụ:
class Person
{
private string name; // field
public string Name // property
{
get { return name; } // get method
set { name = value; } // set method
}
}-
Từ ví dụ trên có thể thấy được rằng thuộc tính
Nameđược liên kết với trườngname. Phương thứcgettrả về giá trị biếnnamevàsetsẽ gán value cho biếnname. -
Lúc này ta có thể truy cập biến
namethông qua thuộc tínhNamevì thuộc tính này có phạm vi truy cập làpublic. -
Ví dụ:
class Person
{
private string name; // field
public string Name // property
{
get { return name; }
set { name = value; }
}
}
class Program
{
static void Main(string[] args)
{
Person myObj = new Person();
myObj.Name = "VirtueSky";
Console.WriteLine(myObj.Name);
}
}-
C# cung cấp một cách để sử dụng các thuộc tính viết tắt/tư động, trong đó bạn không phải định nghĩa trường cho thuộc tính mà chỉ cần viết
get;vàset;bên trong thuộc tính. -
Ví dụ:
class Person
{
public string Name // property
{ get; set; }
}
class Program
{
static void Main(string[] args)
{
Person myObj = new Person();
myObj.Name = "VirtueSky";
Console.WriteLine(myObj.Name);
}
}-
Thuộc tính giúp ngăn chặn việc truy cập trực tiếp đến các trường. Bạn có thể đọc hoặc ghi dữ liệu thông qua thuộc tính.
-
Ví dụ:
private string name; // field
public string Name // property
{
get { return name; }
private set { name = value; }
}Ví dụ trên cho thấy các class bên ngoài chỉ có thể get giá trị thông qua thuộc tính Name mà không thể set vì phương thức set đã bị private.
- Như vậy tính đóng gói chính là việc giới hạn quyền truy cập giá trị của thuộc tính hoặc quyền gọi phương thức (có thể hiểu là che giấu dữ liệu).
- Khi ta muốn che dấu dữ liệu thì ta cần
privatecác trường.
class Person
{
private string name; // field
}- Bên ngoài lớp có thể lấy được giá trị của trường nhưng không thay đổi được giá trị của trường
class Person
{
private string name; // field
public string Name // property
{
get { return name; } // get method
private set { name = value; } // set method
}
}- Bên ngoài vừa có thể lấy được giá trị vừa có thể thay đổi giá trị của trường
class Person
{
private string name; // field
public string Name // property
{
get { return name; } // get method
set { name = value; } // set method
}
}- Đóng gói để có thể kiểm soát tốt hơn các thành viên lớp, không cho phép truy cập và thay đổi đổi giá trị của các trường trong lớp một cách tùy tiện (giảm khả năng làm hỏng mã)
- Các trường có thể thiết lập chỉ đọc (nếu bạn chỉ sử dụng
get) hoặc chỉ ghi (nếu bạn chỉ sử dụngset) - Tăng cường tính bảo mật cho mã
| Previous page | Next page | |
|---|---|---|
| OOP page | Access Modifiers | Inheritance |