26 tháng 8, 2022

Những nét mới trong ngôn ngữ lập trình C# phiên bản 9.0

 


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)

 

chỉ đọc

Không có nhận xét nào:

Đăng nhận xét

Bài đọc nhiều

Tổng số lượt xem trang