Yang baru di C# 10
C# 10 menambahkan fitur dan peningkatan berikut ke bahasa C#:
- Struktur rekaman
- Peningkatan jenis struktur
- Penangan string terinterpolasi
global using
arahan- Deklarasi namespace bercakupan file
- Pola properti yang diperluas
- Peningkatan pada ekspresi lambda
- Izinkan string terinterpolasi
const
- Jenis catat dapat menyegel
ToString()
- Penugasan pasti yang ditingkatkan
- Izinkan penugasan dan deklarasi dalam dekonstruksi yang sama
- Izinkan atribut
AsyncMethodBuilder
pada metode - Atribut CallerArgumentExpression
- Pragma
#line
yang ditingkatkan - Gelombang peringatan 6
C# 10 didukung di .NET 6. Untuk informasi selengkapnya lihat pembuatan versi bahasa C#.
Anda dapat mengunduh SDK .NET 6 terbaru dari halaman unduhan .NET. Anda juga dapat mengunduh Visual Studio 2022, yang mencakup .NET 6 SDK.
Catatan
Kami tertarik dengan umpan balik Anda tentang fitur-fitur ini. Jika Anda menemukan masalah dengan salah satu fitur baru ini, buat masalah baru di repositori dotnet/roslyn.
Struktur rekaman
Anda bisa mendeklarasikan rekaman jenis nilai menggunakan deklarasi record struct
atau readonly record struct
. Anda sekarang dapat mengklarifikasi bahwa adalah record
jenis referensi dengan deklarasi record class
.
Penyempurnaan jenis struktur
C# 10 memperkenalkan peningkatan berikut yang terkait dengan jenis struktur:
- Anda dapat mendeklarasikan konstruktor tanpa parameter instans dalam jenis struktur dan menginisialisasi bidang instans atau properti pada deklarasinya. Untuk informasi lebih lanjut, lihat bagian Inisialisasi struktur dan nilai default dari artikel Jenis struktur.
- Operand kiri
with
dari ekspresi dapat berupa jenis struktur apa pun atau jenis anonim (referensi).
Penangan string terinterpolasi
Anda dapat membuat jenis yang menyusun string yang dihasilkan dari ekspresi string terinterpolasi. Pustaka .NET menggunakan fitur ini di banyak API. Anda dapat membuatnya dengan mengikuti tutorial ini.
Direktif penggunaan global
Anda dapat menambahkan pengubah global
ke apa pun menggunakan direktif untuk menginstruksikan pengkompilasi bahwa direktif berlaku untuk semua file sumber dalam kompilasi. Ini biasanya semua file sumber dalam proyek.
Deklarasi namespace bercakupan file
Anda dapat menggunakan bentuk namespace
baru deklarasi untuk menyatakan bahwa semua deklarasi yang mengikuti adalah anggota namespace yang dideklarasikan:
namespace MyNamespace;
Sintaks baru ini menyimpan ruang horizontal dan vertikal untuk deklarasi namespace
.
Pola properti yang diperluas
Dimulai dengan C# 10, Anda dapat mereferensikan properti atau bidang berlapis dalam pola properti. Misalnya, pola formulir
{ Prop1.Prop2: pattern }
berlaku di C# 10 dan yang lebih baru dan setara dengan
{ Prop1: { Prop2: pattern } }
berlaku di C # 8.0 dan yang lebih baru.
Untuk informasi selengkapnya, lihat catatan proposal fitur Pola properti yang diperluas. Untuk informasi selengkapnya, lihat bagian Pola properti dari artikel Pola.
Peningkatan ekspresi Lambda
C# 10 mencakup banyak peningkatan cara ekspresi lambda ditangani:
- Ekspresi Lambda mungkin memiliki jenis alami, di mana pengkompilasi dapat menyimpulkan jenis delegasi dari ekspresi lambda atau grup metode.
- Ekspresi Lambda dapat mendeklarasikan jenis pengembalian ketika pengkompilasi tidak dapat menyimpulkannya.
- Atribut dapat diterapkan ke ekspresi lambda.
Fitur-fitur ini membuat ekspresi lambda lebih mirip dengan metode dan fungsi lokal. Mereka mempermudah penggunaan ekspresi lambda tanpa mendeklarasikan variabel jenis delegasi, dan mereka bekerja lebih mulus dengan api ASP.NET Core Minimal baru.
String terinterpolasi konstanta
Dalam C# 10, string const
dapat diinisialisasi menggunakan interpolasi string jika semua tempat penampung adalah string konstan. Interpolasi string dapat membuat string konstanta yang lebih mudah dibaca saat Anda membangun string konstanta yang digunakan dalam aplikasi Anda. Ekspresi tempat penampung tidak dapat berupa konstanta numerik karena konstanta tersebut dikonversi ke string pada durasi. Budaya saat ini dapat memengaruhi representasi string mereka. Pelajari selengkapnya dalam referensi bahasa pada const
ekspresi.
Jenis catatan dapat menyegel ToString
Di C# 10, Anda dapat menambahkan pengubah sealed
saat anda mengambil alih ToString
dalam jenis rekaman. Menyegel ToString
metode mencegah pengkompilasi mensintesis ToString
metode untuk setiap jenis rekaman turunan. sealed
ToString
memastikan semua jenis rekaman turunan menggunakan ToString
metode yang ditentukan dalam jenis catatan dasar umum. Anda bisa mempelajari selengkapnya tentang fitur ini di artikel tentang rekaman.
Penugasan dan deklarasi dalam dekonstruksi yang sama
Perubahan ini menghapus pembatasan dari versi C#yang lebih lama. Sebelumnya, dekonstruksi dapat menetapkan semua nilai ke variabel yang ada, atau menginisialisasi variabel yang baru dideklarasikan:
// Initialization:
(int x, int y) = point;
// assignment:
int x1 = 0;
int y1 = 0;
(x1, y1) = point;
C# 10 menghapus pembatasan ini:
int x = 0;
(x, int y) = point;
Penugasan pasti yang ditingkatkan
Sebelum C# 10, ada banyak skenario di mana penugasan yang pasti dan analisis status null menghasilkan peringatan yang positif palsu. Ini umumnya melibatkan perbandingan dengan konstanta boolean, mengakses variabel hanya dalam pernyataan true
atau false
dalam pernyataan if
, dan ekspresi coalescing null. Contoh-contoh ini menghasilkan peringatan dalam versi C#sebelumnya, tetapi tidak di C# 10:
string representation = "N/A";
if ((c != null && c.GetDependentValue(out object obj)) == true)
{
representation = obj.ToString(); // undesired error
}
// Or, using ?.
if (c?.GetDependentValue(out object obj) == true)
{
representation = obj.ToString(); // undesired error
}
// Or, using ??
if (c?.GetDependentValue(out object obj) ?? false)
{
representation = obj.ToString(); // undesired error
}
Dampak utama dari peningkatan ini adalah bahwa peringatan untuk penugasan yang pasti dan analisis status null lebih akurat.
Izinkan atribut AsyncMethodBuilder pada metode
Di C# 10 dan yang lebih baru, Anda dapat menentukan penyusun metode asinkron yang berbeda untuk satu metode, selain menentukan jenis penyusun metode untuk semua metode yang mengembalikan jenis seperti tugas tertentu. Penyusun metode asinkron kustom memungkinkan skenario penyetelan performa tingkat lanjut di mana metode tertentu dapat memperoleh manfaat dari penyusun kustom.
Untuk mempelajari lebih lanjut, lihat bagian di artikel AsyncMethodBuilder
tentang atribut yang dibaca oleh pengkompilasi.
Diagnostik atribut CallerArgumentExpression
Anda dapat menggunakan System.Runtime.CompilerServices.CallerArgumentExpressionAttribute untuk menentukan parameter yang diganti pengkompilasi dengan representasi teks argumen lain. Fitur ini memungkinkan pustaka untuk membuat diagnostik yang lebih spesifik. Kode berikut menguji kondisi. Jika kondisinya salah, pesan pengecualian berisi representasi teks dari argumen yang diteruskan ke condition
:
public static void Validate(bool condition, [CallerArgumentExpression("condition")] string? message=null)
{
if (!condition)
{
throw new InvalidOperationException($"Argument failed validation: <{message}>");
}
}
Anda dapat mempelajari selengkapnya tentang fitur ini di artikel tentang atribut informasi Penelepon di bagian referensi bahasa.
Pragma #line yang ditingkatkan
C# 10 mendukung format baru untuk pragma #line
. Anda mungkin tidak akan menggunakan format baru, tetapi Anda akan melihat efeknya. Penyempurnaan memungkinkan output yang lebih halus dalam bahasa khusus domain (DLL) seperti Razor. Mesin Razor menggunakan peningkatan ini untuk meningkatkan pengalaman debugging. Anda akan menemukan debugger dapat menyoroti sumber Razor Anda dengan lebih akurat. Untuk mempelajari selengkapnya tentang sintaks baru, lihat artikel tentang Direktif pra-prosesor dalam referensi bahasa. Anda juga dapat membaca spesifikasi fitur untuk contoh berbasis Razor.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk