-
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à
private
chỉ 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à
get
và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ứcget
trả về giá trị biếnname
vàset
sẽ gán value cho biếnname
. -
Lúc này ta có thể truy cập biến
name
thông qua thuộc tínhName
vì 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
private
cá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 |