Bài viết này được viết bởi Thomas Claudius Huber
Thẻ: .NET, C#
Trong bài viết trước về C# 14, bạn đã học về Extension Members. Trong bài viết này, bạn sẽ học về từ khóa mới field của C# 14. Tôi đã mơ về nó từ năm 2008 và tôi đã viết blog về giấc mơ về các thuộc tính tự động một nửa. Với C# 14, giấc mơ này đã trở thành hiện thực. Vậy hãy cùng xem tính năng mới này.
Mục lục
Thuộc tính tự động hay thuộc tính đầy đủ
Trước C# 14, không có gì ở giữa thuộc tính tự động (auto property = thuộc tính được triển khai tự động) và thuộc tính đầy đủ. Giả sử bạn có thuộc tính tự động này:
public class Person
{
public string? FirstName { get; set; }
}
Như bạn có thể biết, đằng sau hậu trường, một trường riêng tư (private field) được tạo bởi trình biên dịch C# để lưu trữ giá trị cho thuộc tính FirstName. Bạn có thể thấy trường riêng tư đó trong công cụ ILDASM (Intermediate Language Disassembler).
Điều này có nghĩa là với các thuộc tính tự động, trường dự phòng (backing field) được tạo tự động cho bạn đằng sau hậu trường. Nhưng bây giờ, nếu bạn muốn thêm một cái gì đó trong setter của một thuộc tính tự động như vậy thì sao? Ví dụ: nếu bạn muốn kích hoạt sự kiện PropertyChanged trong setter, đây là một tình huống phổ biến trong các lớp ViewModel? Nếu bạn muốn làm điều đó, bạn phải chuyển sang một thuộc tính đầy đủ với một trường dự phòng rõ ràng như thế này:
public class Person
{
private string? _firstName;
public string? FirstName
{
get { return _firstName; }
set
{
_firstName = value;
// Thêm logic bổ sung của bạn ở đây
}
}
}
Trở lại năm 2008, ý tưởng của tôi là có một cái gì đó ở giữa hai trạng thái này của thuộc tính tự động và thuộc tính đầy đủ. Tôi nghĩ rằng điều này sẽ có thể thực hiện được bằng cách cung cấp một từ khóa cho phép bạn truy cập trường dự phòng được tạo của thuộc tính tự động. Và chính xác một từ khóa như vậy đã được giới thiệu với C# 14.
Từ khóa field
Từ khóa field được giới thiệu với C# 14 cung cấp cho bạn quyền truy cập vào trường dự phòng được tạo của thuộc tính tự động. Điều này có nghĩa là thuộc tính đầy đủ từ trên cũng có thể được viết như dưới đây. Lưu ý cách sử dụng từ khóa field để truy cập trường dự phòng được tạo của thuộc tính tự động.
public class Person
{
public string? FirstName
{
get { return field; }
set { field = value; }
}
}
Và tất nhiên, nếu bạn không cần truy cập trường dự phòng trong getter hoặc setter, bạn có thể sử dụng getter hoặc setter được triển khai tự động. Dưới đây bạn thấy cùng một thuộc tính như trên, nhưng bây giờ với getter tự động.
public class Person
{
public string? FirstName
{
get;
set { field = value; }
}
}
Điều này có nghĩa là một thuộc tính điển hình trong ViewModel kích hoạt sự kiện PropertyChanged trong setter có thể được viết ngắn gọn hơn và không cần trường dự phòng rõ ràng. Trước C# 14, thuộc tính như vậy trông như dưới đây:
private string? _firstName;
public string? FirstName
{
get { return _firstName; }
set
{
_firstName = value;
OnPropertyChanged(nameof(FirstName));
}
}
Từ C# 14, bạn có thể viết nó nhỏ gọn hơn như dưới đây. Lưu ý rằng không có trường dự phòng rõ ràng và không có triển khai rõ ràng của getter.
public string? FirstName
{
get;
set
{
field = value;
OnPropertyChanged(nameof(FirstName));
}
}
Kết luận
Từ khóa field của C# 14 là một bổ sung nhỏ nhưng mạnh mẽ cho ngôn ngữ C#. Nó có nghĩa là bạn có thể triển khai logic tùy chỉnh trong setter mà không cần tạo một thuộc tính .NET đầy đủ với một trường dự phòng rõ ràng. Tôi thích nó và tôi chắc chắn sẽ sử dụng nó cho những dự án mà tôi chuyển sang .NET 10 trở lên.
Tôi muốn nói, tất nhiên tôi sẽ sử dụng tính năng này, vì nó trông chính xác như những gì tôi đã muốn từ năm 2008.
Chúc bạn lập trình vui vẻ,
Thomas



