Tôi chưa hiểu thấu đáo cách dùng get và sét trong c#, ai biết giúp đỡ nhé, cảm ơn nhiều!
Tôi chưa hiểu thấu đáo cách dùng get và sét trong c#, ai biết giúp đỡ nhé, cảm ơn nhiều!
2 từ khóa này dùng trong định nghĩa Property mà.
Xin chân thành cảm ơn! Nhưng các bros cho một ví dụ minh họa thì tuyệt vời hơn.
2 thuộc tính này thường dùng để thao tác với fields private.Đảm bảo tính encapsulate của oop.
ví dụ:
Code:private int x; private string y; public int X { get{ return x;} set{ x = value;} } public string Y { get{ return y;} set{ y = value;} } trong .Net >=3.0.ban có thể khai báo 1 cách ngắn gọn public int X{get;set;};//khong can phai khai báo int x;
Giải thich cách dùng get/set có thể phải nói hết vài trang. Bởi ví muốn hiểu hai từ này, bạn phải phân biệt được cái khác nhau giữa biến (field) và thuộc tính (property)
Ở đây chỉ có thể nói sơ qua. Như cnttk2005 đã giải thích, get là lấy giá trị và set là gán giá trị cho một biến nào đó.
Vậy bạn sẽ đặt câu hỏi: tại sao không lấy và gán thẳng thừng?
Trả lời: là vì biến này không hẳn đã hiện vật, mà rất có nhiều khả năng nó có dạng gián tiếp hay có khi còn là trừu tượng nữa. Nói cách khác, khái niệm thuộc tính (properties) được đặt ra để chỉ vào trường hợp biến gián tiếp/trừu tượng này.
VD thuộc tính gián tiếp:
string ten, ho; // ten, ho là 2 biến (fields)
string HoVaTen // thuộc tính (property)
{
get { return ho + " " + ten; }
set { ho = TachHoTuHoVaTen(value); ten = TachTenTuHoVaTen(value); }
}
ho = "Le";
ten = "Van Bom";
Console.WriteLine(HoVaTen); // in ra Le Van Bom
HoVaTen = "Nguyen Van Be";
Console.WriteLine(ho); // in ra Nguyen
Console.WriteLine(ten); // in ra Van Be
(dĩ nhiên là bạn phải có hàm để nhận một chuỗi và tách họ, tên ra. Hoặc bạn có code trong phần set {...} để tách value thành ra ho và ten)
Code trên chỉ là ví dụ thôi, trên thực tế khi khai báo lớp người ta đặt biến là private để giấu chúng đi và đặt thuộc tính làm public như giao diện (như vd đôi biến x, y và đôi thuộc tính X, Y của Pa Pa). Thường thì thuộc tính luôn được đặt public. Nếu không muốn thuộc tính bị thay đổi, người ta không lập hàm set. Tương tự, nếu không muốn cho đọc thuộc tính, người ta không lập hàm get.
Ngoài lý do biến gián tiếp kể trên, người ta còn dùng thuộc tính để trừu tượng hóa dạng của biến, giúp cho code dễ bảo trì. VD bạn có biến NgayNhapHoc, hiện nằm trong dạng string 'dd/mm/yyyy'. Một ngày đẹp trời, bạn đổi nó thành dạng DateTime. Nếu không có thuộc tính, bạn phải search hết tất cả các module có sử dụng lớp này và sửa những chỗ dùng trường NgayNhapHoc, một công việc không nhỏ. Trong khi đó, nếu NgayNhapHoc đã là private, tức là không có code nào sử dụng nó cả (ngoài code trong lớp), và để nhập/xuất trường này, bạn đã đặt ra thuộc tính NgayNH. Bạn chỉ việc sửa phần get/set của cái thuộc tính NgayNH này thôi. Chúng vẫn nhập một string và xuất ra một string dạng 'dd/mm/yyyy' nên bạn không phải sửa thêm module nào nữa cả. (Đây là phần kỹ thuật code cao cấp, bạn không cần phải đào sâu thêm trong giai đoạn này)
Thank tất cả mọi người đã nhiệt tình giúp đỡ !
Bookmarks