Thuộc tính C# (Nhận và đặt)
Thuộc tính và đóng gói
Trước khi chúng tôi bắt đầu giải thích các thuộc tính, bạn nên có hiểu biết cơ bản về " Đóng gói ".
Ý nghĩa của Encapsulation là đảm bảo rằng dữ liệu "nhạy cảm" được ẩn khỏi người dùng. Để đạt được điều này, bạn phải:
- khai báo các trường/biến là
private
- cung cấp các phương thức
get
vàset
public
, thông qua các thuộc tính , để truy cập và cập nhật giá trị của trườngprivate
Của cải
Bạn đã học từ chương trước rằng các biến private
chỉ có thể được truy cập trong cùng một lớp (lớp bên ngoài không có quyền truy cập vào nó). Tuy nhiên, đôi khi chúng ta cần truy cập chúng - và việc đó có thể được thực hiện bằng các thuộc tính.
Một thuộc tính giống như sự kết hợp của một biến và một phương thức, nó có hai phương thức: phương thức get
và phương thức set
:
Ví dụ
class Person { private string name; // field public string Name // property { get { return name; } // get method set { name = value; } // set method } }
Ví dụ giải thích
Thuộc tính Name
được liên kết với trường name
. Một cách thực hành tốt là sử dụng cùng tên cho cả thuộc tính và trường riêng tư, nhưng có chữ cái đầu tiên viết hoa.
Phương thức get
trả về giá trị của name
biến.
Phương thức set
gán value
cho biến name
. Từ khóa value
đại diện cho giá trị chúng ta gán cho thuộc tính.
Nếu bạn chưa hiểu rõ về nó, hãy xem ví dụ dưới đây.
Bây giờ chúng ta có thể sử dụng thuộc tính Name
để truy cập và cập nhật trường private
của lớp Person
:
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 = "Liam"; Console.WriteLine(myObj.Name); } }
Đầu ra sẽ là:
Liam
Thuộc tính tự động (tay ngắn)
C# cũng cung cấp cách sử dụng các thuộc tính ngắn gọn/tự động, trong đó bạn không phải xác định trường cho thuộc tính và bạn chỉ phải viết get;
và set;
bên trong tài sản.
Ví dụ sau sẽ cho kết quả tương tự như ví dụ trên. Sự khác biệt duy nhất là có ít mã hơn:
Ví dụ
Sử dụng thuộc tính tự động:
class Person { public string Name // property { get; set; } } class Program { static void Main(string[] args) { Person myObj = new Person(); myObj.Name = "Liam"; Console.WriteLine(myObj.Name); } }
Đầu ra sẽ là:
Liam
Tại sao đóng gói?
- Kiểm soát tốt hơn các thành viên trong lớp (giảm khả năng bản thân (hoặc người khác) làm sai mã)
- Các trường có thể được đặt ở chế độ chỉ đọc (nếu bạn chỉ sử dụng phương thức
get
) hoặc chỉ ghi (nếu bạn chỉ sử dụng phương thứcset
) - Linh hoạt: lập trình viên có thể thay đổi một phần code mà không ảnh hưởng đến các phần khác
- Tăng cường bảo mật dữ liệu