Init-only là feature được thêm vào C# 9.0. Vậy tác dụng của nó là gì?
Trước hết chúng ta cần hiểu khái niệm mutable và immutable
Mutable nghĩa là “can change” – có thể thay đổi. Một đối tượng sau khi được tạo, data member có thể được thay đổi.
Immutable nghĩa là “can’t change” – không thể thay đổi. Data member không thể thay đổi giá trị sau khi đối tượng được tạo ra.
VD: string là immutable type. Mỗi khi bạn gán giá trị, biến string sẽ được khởi tạo mới.
String Builder được dùng đại diện cho kiểu dữ liệu string có thể thay đổi được.
Giả sử bạn có kiểu dữ liệu Member với 3 properties (Id, Name, Address).
Làm sao để Id là kiểu Immutable type.
Xử lý dữ liệu kiểu truyền thống
Tạo class Member với 3 thuộc tính sau:
public class Member
{
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
}
Dưới đây là đoạn code gán giá trị
var memberObj = new Member();
memberObj.Id = 1;
memberObj.Name = "An Binh Trong";
memberObj.Address = "Viet Nam";
Console.WriteLine("****************START - Member Details***********");
Console.WriteLine("ID: " + memberObj.Id);
Console.WriteLine("Name: " + memberObj.Name);
Console.WriteLine("Address: " + memberObj.Address);
Console.WriteLine("****************END - Member Details***********");
memberObj.Id = 2;
Console.WriteLine("ID: " + memberObj.Id);
Id sẽ dễ dàng thay đổi ở 1 đoạn code nào đó bên dưới.
Để ngăn việc đổi Id, bạn bỏ set trong khai báo property
public class Member
{
public Member(int memberId)
{
Id = memberId;
}
public int Id { get; }
public string Name { get; set; }
public string Address { get; set; }
}
Với C# 9.0 trở về sau
Bạn sử dụng init thay cho set.
public class Member
{
public int Id { get; init; }
public string Name { get; set; }
public string Address { get; set; }
}
Nhận xét
Đăng nhận xét