C# 9.0 và C# 10.0 mang đến nhiều cải tiến và tính năng mới, giúp cải thiện hiệu suất, bảo mật và khả năng lập trình. Dưới đây là tổng quan về các cú pháp mới và cách sử dụng chúng trong C# 9.0 và C# 10.0.
C# 9.0
1. Records
Records là một loại tham chiếu đặc biệt dùng để lưu trữ dữ liệu bất biến.
public record Person(string FirstName, string LastName);
Bạn có thể tạo một instance của record như sau:
var person = new Person("John", "Doe");
2. Init-only Properties
Cho phép bạn chỉ định các thuộc tính chỉ có thể được thiết lập trong quá trình khởi tạo đối tượng.
public class Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
Sử dụng:
var person = new Person { FirstName = "John", LastName = "Doe" };
3. With-expressions
Dùng để tạo bản sao của một đối tượng record với một vài thay đổi.
var person = new Person("John", "Doe");
var newPerson = person with { LastName = "Smith" };
4. Pattern Matching Enhancements
C# 9.0 mở rộng cú pháp pattern matching.
- Type patterns:
if (obj is Person person)
{
Console.WriteLine(person.FirstName);
}
- Logical patterns:
if (obj is not null and Person person)
{
Console.WriteLine(person.FirstName);
}
5. Target-typed New Expressions
Giảm thiểu sự lặp lại khi tạo đối tượng.
Person person = new("John", "Doe");
C# 10.0
1. Global Using Directives
Cho phép khai báo các using directives một lần cho toàn bộ dự án.
// GlobalUsings.cs
global using System;
global using System.Collections.Generic;
2. File-scoped Namespaces
Giúp mã nguồn gọn gàng hơn bằng cách sử dụng namespace cho toàn bộ tệp.
namespace MyNamespace;
public class MyClass
{
// Class code
}
3. Improved Lambda Expressions
Cải tiến lambda với các tính năng như cú pháp đơn giản hơn và hỗ trợ kiểu trả về.
Func<int, int> square = x => x * x;
4. Record Structs
Giống như records, nhưng là struct, giúp giảm tải bộ nhớ.
public record struct Point(int X, int Y);
5. Extended Property Patterns
Mở rộng khả năng sử dụng pattern matching với các thuộc tính.
if (person is { Address.City: "New York" })
{
// Do something
}
Ví Dụ Tổng Hợp
Dưới đây là ví dụ tổng hợp sử dụng một số tính năng mới trong C# 9.0 và C# 10.0:
// GlobalUsings.cs
global using System;
global using System.Collections.Generic;
// Program.cs
namespace MyApplication;
public record Person(string FirstName, string LastName)
{
public string FullName => $"{FirstName} {LastName}";
}
public class Program
{
public static void Main()
{
Person person = new("John", "Doe");
// Using with-expressions
var newPerson = person with { LastName = "Smith" };
Console.WriteLine(newPerson.FullName);
// Pattern matching
if (person is { FirstName: "John", LastName: "Doe" })
{
Console.WriteLine("Matched John Doe");
}
// Lambda expressions
Func<int, int> square = x => x * x;
Console.WriteLine(square(5)); // Output: 25
}
}
Tổng Kết
C# 9.0 và C# 10.0 đã mang lại nhiều tính năng và cải tiến mới, giúp lập trình viên có thể viết mã nguồn hiệu quả, rõ ràng và dễ bảo trì hơn. Dưới đây là những điểm chính cần ghi nhớ:
C# 9.0
- Records: Tạo các loại tham chiếu bất biến, thích hợp cho việc lưu trữ dữ liệu.
- Init-only Properties: Giúp đảm bảo tính bất biến của các thuộc tính sau khi khởi tạo.
- With-expressions: Cho phép tạo bản sao của đối tượng với một vài thay đổi nhỏ.
- Pattern Matching Enhancements: Mở rộng cú pháp pattern matching, bao gồm type patterns và logical patterns.
- Target-typed New Expressions: Giảm thiểu sự lặp lại khi tạo đối tượng.
C# 10.0
- Global Using Directives: Khai báo các
usingdirectives toàn cầu, giúp mã nguồn gọn gàng hơn. - File-scoped Namespaces: Đơn giản hóa việc sử dụng namespace cho toàn bộ tệp.
- Improved Lambda Expressions: Cải tiến cú pháp lambda và hỗ trợ kiểu trả về.
- Record Structs: Kết hợp tính năng của records với struct để giảm tải bộ nhớ.
- Extended Property Patterns: Mở rộng khả năng pattern matching với các thuộc tính.
Comments