.NET 11 vừa phát hành bản chính thức (GA), đi kèm C# 15 là phiên bản ngôn ngữ mặc định cho project nhắm tới net11.0. Bài này điểm nhanh những thay đổi đáng chú ý nhất để các bạn biết có gì đáng thử.
C# 15: các tính năng ngôn ngữ mới
Union types
Cuối cùng C# cũng có union: một giá trị có thể là một trong vài kiểu cố định, và compiler kiểm tra switch đã đủ trường hợp hay chưa (exhaustiveness).
public record class Cat(string Name);
public record class Dog(string Name);
public record class Bird(string Name);
public union Pet(Cat, Dog, Bird);
Pet pet = new Dog("Rex");
string name = pet switch
{
Dog d => d.Name,
Cat c => c.Name,
Bird b => b.Name, // thiếu một case là compiler báo ngay
};
Collection expression arguments
Truyền tham số cho constructor ngay trong collection expression, ví dụ đặt capacity hoặc comparer:
List<string> names = [with(capacity: values.Length * 2), .. values];
HashSet<string> set = [with(StringComparer.OrdinalIgnoreCase), "Hello", "HELLO", "hello"];
Những thay đổi nhỏ nhưng tiện
- Closed hierarchies:
closed record classgiới hạn các lớp con, kết hợp tốt vớiswitchkiểm tra đủ trường hợp. - Extension indexers: thêm indexer
this[int index]cho kiểu có sẵn qua extension block. - Labeled break/continue: thoát hoặc tiếp tục vòng lặp ngoài từ vòng lặp lồng nhau bằng nhãn, như
continue outer;. - Memory safety (đang ở dạng preview): cần đặt
LangVersionlàpreview, chưa nên dùng cho production.
Runtime và hiệu năng
- Runtime Async: async được runtime hỗ trợ trực tiếp, cho stack trace dễ đọc hơn và giảm overhead. Thư viện runtime đã được biên dịch với tính năng này. Trước khi bật cho project của bạn, hãy kiểm tra lại tài liệu về cấu hình mặc định.
- JIT thông minh hơn: loại bỏ bounds check, devirtualization tốt hơn, gộp switch expression, constant folding cho so sánh chuỗi.
- Phần cứng: thêm Arm SVE2, AVX-VNNI-512,
Halfdùng FP16 phần cứng. - Linux:
Guid.NewGuid()dùnggetrandom(), nhanh hơn khoảng 12% theo tài liệu của Microsoft. - Crash report trong process: bật bằng biến môi trường
DOTNET_EnableCrashReport=1.
Yêu cầu phần cứng cao hơn
Trên x86/x64, mức tối thiểu tăng từ x86-64-v1 lên x86-64-v2. CPU quá cũ sẽ không chạy được .NET 11. Nếu bạn deploy lên máy ảo hoặc máy cũ, hãy kiểm tra trước khi nâng cấp.
Thư viện
System.Text.Jsonhỗ trợ union và xuất JSONL.- Thêm
Decimal32/64/128, nén Zstandard trongSystem.IO.Compression. - LINQ có
FullJoinvà các overload Join/GroupJoin cho tuple. - Một số API mật mã mới (X25519), và vài API thử nghiệm như composite ML-KEM, HPKE.
SDK và công cụ
dotnet run -e KEY=VALUEđể truyền biến môi trường khi chạy.- File-based apps hỗ trợ
#:include. dotnet testcó--timeout,--no-dependencies, thêm template xUnit v3 và NUnit.dotnet slnhỗ trợ solution filter.slnf.- NativeAOT CLI và MSBuild server được bật mặc định.
Nên làm gì tiếp?
- Cài .NET 11 SDK tại dotnet.microsoft.com/download/dotnet/11.0.
- Thử đổi
TargetFrameworksangnet11.0trong một project nhỏ, chạy test và xem warning mới. - Thử union types với một bài toán thật, ví dụ kết quả
Success | Error. - Đọc thêm các trang chính thức bên dưới, đặc biệt phần breaking changes trước khi nâng cấp project lớn.
