Ngôn ngữ lập trình C# khá quen thuộc với các bạn học tập và làm việc trong ngành Phần mềm. Vào ngày 11-13.11.2020, Microsoft đã công bố phiên bản c# 9.0 cùng với .NET 5.0 trong hội thẻo Build 2020. Vậy C# 9.0 (sau đây gọi là C#) có gì mới so với các bản trước đây mời các bân cùng điểm lại vào chi tiết sau.
1.
Init-only Property
Bạn có
biết về biến immutable?
Đây là
loại biến mà chúng đực tạo ra, gán giá trị và không thay đổi giá trị nữa cho
đến khi kết thúc chương trình.
Chúng
ta cùng xem xét ví dụ với class Person sau:
class
Person {
public string FirstName { get; set;}
public
string LastName { get; set; }
}
Khi sử dụng tạo mới đối
tượng, chúng ta có thể khởi tạo giá trị cho các Prpperty của chúng
var
person = new Person { FirstName = "Mads", LastName =
"Torgersen" };
Khi đó chúng ta có thể
thay đổi giá trị các trường trong quá trình sử dụng. Như vậy các trường này trở
thành mutable. Vậy làm thế nào để chúng ta có thể kiểm soát được việc giá trị
của trường sẽ không thể thay đổi C# có hỗ trợ Init-ony Property để giải quyết
vấn đề
class
Person {
public
string FirstName { get; init;}
public
string LastName { get; init; }
}
Dùng từ khóa init thay
cho set trong phàn setter của property. Khi chúng ta khởi tạo biến person như
ví dụ trên, các trường sẽ không thể thay đổi được giá trị nữa.
person.FirstName
= "Joe";
person.LastName
= "Biden";
Hai lệnh như trên khi
compile sẽ báo lỗi nếu bạn dùng với từ khóa init. Bạn chỉ được set value cho
các trường ngay thời điểm khởi tạo đối tượng.
2. Sử
dụng init accessor và trường readonly
Một field của class được set privite accessor, sau đó chúng ta define 1 property để public việc get, set của field này, thì field này được gọi là backing field trong C# .
Dùng từ khóa readonly để chỉ đinh field này chỉ được set giá trị đúng một lần, sau đó sẽ được coi như runtime constant.
Dùng init-property đã nói ở phần trước để áp vào trường hợp này, chỉ init property đúng vào thời điểm khởi tạo, ta gọi đó là init accessor
public class Person
{
private readonly string firstName =
"<unknown>";
private readonly string lastName =
"<unknown>";
public string FirstName
{
get => firstName; init => firstName = (value ?? throw
new ArgumentNullException(nameof(FirstName))); } public string LastName
{
get => lastName;
init => lastName = (value ?? throw
new ArgumentNullException(nameof(LastName))); }
}
3. Kiểu
bản ghi record
4.
Psitional record
5. Biểu
thức with
6.
Top-level programs
7.
Target typing và biểu thức new
8. Tóm
tắt
(đang soạn...)
Link gốc: C# 9.0 on the record - .NET Blog (microsoft.com)
1. Init-only Property
Bạn có
biết về biến immutable?
Đây là
loại biến mà chúng đực tạo ra, gán giá trị và không thay đổi giá trị nữa cho
đến khi kết thúc chương trình.
Chúng
ta cùng xem xét ví dụ với class Person sau:
class
Person {
public string FirstName { get; set;}
public
string LastName { get; set; }
}
Khi sử dụng tạo mới đối
tượng, chúng ta có thể khởi tạo giá trị cho các Prpperty của chúng
var
person = new Person { FirstName = "Mads", LastName =
"Torgersen" };
Khi đó chúng ta có thể
thay đổi giá trị các trường trong quá trình sử dụng. Như vậy các trường này trở
thành mutable. Vậy làm thế nào để chúng ta có thể kiểm soát được việc giá trị
của trường sẽ không thể thay đổi C# có hỗ trợ Init-ony Property để giải quyết
vấn đề
class
Person {
public
string FirstName { get; init;}
public
string LastName { get; init; }
}
Dùng từ khóa init thay
cho set trong phàn setter của property. Khi chúng ta khởi tạo biến person như
ví dụ trên, các trường sẽ không thể thay đổi được giá trị nữa.
person.FirstName
= "Joe";
person.LastName
= "Biden";
Hai lệnh như trên khi
compile sẽ báo lỗi nếu bạn dùng với từ khóa init. Bạn chỉ được set value cho
các trường ngay thời điểm khởi tạo đối tượng.
2. Sử
dụng init accessor và trường readonly
Một field của class được set privite accessor, sau đó chúng ta define 1 property để public việc get, set của field này, thì field này được gọi là backing field trong C# .
Dùng từ khóa readonly để chỉ đinh field này chỉ được set giá trị đúng một lần, sau đó sẽ được coi như runtime constant.
Dùng init-property đã nói ở phần trước để áp vào trường hợp này, chỉ init property đúng vào thời điểm khởi tạo, ta gọi đó là init accessor
{
private readonly string firstName = "<unknown>";
private readonly string lastName = "<unknown>";
public string FirstName
{
get => firstName;
{
get => lastName;
}
3. Kiểu
bản ghi record
4.
Psitional record
5. Biểu
thức with
6.
Top-level programs
7.
Target typing và biểu thức new
8. Tóm
tắt
(đang soạn...)
Link gốc: C# 9.0 on the record - .NET Blog (microsoft.com)
chỉ đọc
Không có nhận xét nào:
Đăng nhận xét