C# sedang menuju dekade ketiga kehidupannya. Awalnya dirilis pada tahun 2000, bahasa ini telah berkembang dan berubah di 9 versi utama. Dulunya merupakan tiruan dari Java, namun namanya melonjak dalam banyak aspek.

Sepanjang masa pakainya, rilis versi pengganti bahasa ini sangat tinggi termasuk rilis versi terbaru Visual Studio juga seperti rilis runtime .NET. Kombinasi ini nyatanya telah menurunkan laju inovasi.

Usulan Fitur C# 9:

1. Pernyataan tingkat atas

Pernyataan tingkat atas menghapus upacara yang tidak perlu dari banyak aplikasi.

Menulis program sederhana ke C# memerlukan sejumlah besar kode boilerplate. Pertimbangkan “Halo Dunia!” program.

Dengan pernyataan tingkat atas, kita dapat menghilangkan kode boilerplate dan segera mulai mengkodekan logikanya.

Kita mungkin bertanya-tanya bagaimana cara kerjanya tanpa tanda tangan kelas & metode [namespace bersifat opsional] & bagaimana kerangka .NET mengidentifikasi titik masuk. Apa yang dilakukan C# 9 adalah, jika kita memiliki file kelas dengan pernyataan tingkat atas, maka itu dianggap sebagai titik masuk aplikasi. Pernyataan tingkat atas sangat bagus untuk program konsol kecil, cuplikan, dan utilitas. Itu membuat hidup lebih sederhana.

Spesifikasi:

Program harus muncul setelah penggunaan dan sebelum deklarasi tipe atau namespace apa pun dalam file, pernyataan tingkat atas harus tersedia hanya dalam satu file dalam proyek, sama seperti Anda hanya dapat memiliki satu metode Utama. Jika Anda ingin mengembalikan kode status, silakan melakukannya. Jika Anda ingin menunggu barang, Anda dapat melakukan ini. Dan jika Anda ingin mengakses argumen baris perintah, args tersedia sebagai parameter "ajaib".

Fungsi lokal adalah suatu bentuk pernyataan dan juga diizinkan dalam program tingkat atas. Merupakan suatu kesalahan untuk memanggil mereka dari mana saja di luar bagian pernyataan tingkat atas.

2. Init hanya penyetel

Dalam tipe Produk ini, ada ProductId, ProductName, dan FixedPrice dengan pengakses pengambil dan penyetel dan yang menjadi perhatian di sini adalah objek dapat berubah. Artinya setelah objek dibuat, kita dapat mengubah nilainya seperti di bawah ini:

Untuk membuat tidak dapat diubah ini, dengan menggunakan konstruktor kita dapat mencapainya.

Pada kode di atas, diperlukan sejumlah besar kode boiler untuk mendukungnya. Di situlah fiturC# 9baru Setter khusus Initbersinar. Daripada menggunakan Set, kita dapat menggunakan kata kunci init. Hal ini menjadikannya tidak dapat diubah atau hanya dapat dibaca. Jika kita mencoba mengubah kapan properti diinisialisasi, itu tidak mengizinkannya, kompiler akan menampilkan kesalahan. Dan ini adalah perubahan besar, yang dapat menghilangkan banyak kode boilerplate.

3. Catatan

Catatan mendefinisikan tipe referensi yang tidak dapat diubah dan berperilaku seperti tipe nilai. Setelah rekaman ditentukan, kami tidak dapat mengubah nilai properti apa pun dari instance catatan.

Untuk membuat seluruh objek tidak dapat diubah, kata kunci init harus didefinisikan pada setiap properti jika konstruktor tanpa parameter implisit digunakan.

Anggota secara implisit berada dalam publikdalamcatatan jika Anda tidak menjelaskannya dengan tepat. Catatan memperkenalkan properti otomatis khusus init publik yang merupakan singkatan dari deklarasi sebelumnya:

Catatan mendukung warisan. Anda dapat melaporkan catatan baru yang diperoleh dari Orang tersebut seperti di bawah ini dan Anda juga dapat menyegel catatan tersebut untuk menghindari pengambilan lebih lanjut.

Secara default, kelas reguler sama ketika kelas tersebut mendasari referensi. Perilakunya berubah jika Anda mendeklarasikan kelas Anda sebagai catatan. Berbeda dengan membandingkan referensi objek, rekaman dibandingkan berdasarkan nilainya. Artinya dua objek berbeda yang memiliki nilai yang sama akan dianggap sama dan kode hashnya akan sama. Isi akan dapat menentukan Catatan, bukan berdasarkan identitas.

Rekor posisi

Ada manfaatnya dalam mengadopsi "pendekatan posisional terhadap suatu catatan" dan isinya diberikan melalui argumen konstruktor dan dapat diekstraksi dengan dekonstruksi posisi. Sangat mungkin untuk mendefinisikan konstruktor dan dekonstruktor Anda sendiri dalam sebuah catatan:

Namun sintaksisnya jauh lebih pendek untuk menyatakan hal yang persis sama.

Ini mendeklarasikan properti otomatis khusus init publik dan konstruktor dan dekonstruktor, agar Anda dapat menulis:

Dalam kasus properti auto, miliki properti nama yang sama, dan konstruktor dan dekonstruktor yang dihasilkan hanya akan menggunakan properti tersebut. Jika demikian, parameter digunakan untuk inisialisasi. Katakanlah, misalnya, Anda lebih memilih untuk melihat FirstName sebagai properti yang dilindungi:

Catatan posisi dapat memanggil konstruktor dasar dengan cara berikut:

Dengan Ekspresi

Saat bekerja dengan data yang tidak dapat diubah, tugas yang paling umum adalah membuat nilai baru dari nilai yang sudah ada untuk mewakili keadaan baru dan ini disebut mutasi non-destruktif. Sekarang, mari kita bahas tentang 'Dengan Ekspresi'. Kita dapat mendefinisikan beberapa properti menggunakan Dengan Ekspresi. 'dengan ekspresi' memanggil konstruktor salinan untuk dipanggil dan kemudian menerapkan penginisialisasi objek di bagian atas untuk mengubah properti yang sesuai. Mari kita amati cirinya,

Sekarang semuanya baik-baik saja. Misalkan catatan siswa terdiri dari 40 properti. Bukan ide yang baik untuk menggunakan metode di atas. Karena ada banyak kode yang terlibat. Dari versi sebelumnya, dengan menggunakan copy konstruktor, objek baru dapat dibuat menggunakan properti objek lama dan baru sesuai dengan permintaan. Sekarang, hal ini dapat ditangani dengan lebih efisien menggunakan fungsi C# 9 kami yang baru 'dengan ekspresi' dengan cara berikut ini kita akan memperoleh hasil yang sama.

4. Pencocokan pola yang ditingkatkan

Pencocokan pola diperkenalkan di C# dan telah berkembang secara signifikan sejak saat itu. Peningkatan terbaru cukup menarik di C#. Pencocokan pola memungkinkan pengembang mencocokkan nilai (atau objek) dengan pola tertentu untuk memilih cabang/blok kode.

Pola relasional

C# 9memungkinkan Anda menggunakan pola relasional yang memungkinkan pemanfaatan ‹, ›, ‹=dan ›=dalam pola seperti ini:

Yang Saat Ini Kami Miliki

Pertama-tama, bayangkan hambatan dalam C#8 yang harus selalu siap kita selesaikan dengan Pencocokan Pola Relasional di C# 9 sehingga kita akan benar-benar melihat kekuatan.

Mari kita ambil kode berikut:

Bagaimana kita bisa memperbaikinya? Ya, kita masih bisa menggunakan If/Else dari atas dalam banyak kasus hanya karena kesederhanaannya. Namun, kita dapat menggunakan Pencocokan Pola yang diperkenalkan di C# 7dengan pernyataan switch. Tampilannya akan seperti ini:

Tidak buruk, bukan? Tapi kami tidak benar-benar menambahkan apa pun ke pernyataan If/Else, sebenarnya kami menambahkan lebih banyak kode lagi di sini. Jika kita menggunakan C# 8, maka kita bisa menggunakanSwitch Expressions. Ini akan menjadi seperti ini:

Pola logis && Pencocokan Pola Relasional dalam Pernyataan/Ekspresi Saklar

C# 9memungkinkan Anda menggunakan operator logika seperti 'dan', 'or'dan 'not', mereka dapat bahkan digabungkan dengan pola relasional seperti ini dan Kami masih dapat menyempurnakan kode di atas seperti ini:

5. Ekspresi 'baru' yang diketik target

Kita bisa menghilangkan tipe 'ekspresi baru' ketika objek yang dibuat sudah diketahui.

Keluaran:

Kita tahu bahwa sintaks di atas tersedia dari versi C# sebelumnya. Ekspresi baru dalam C# selalu memerlukan tipe yang harus ditentukan (kecuali untuk ekspresi array yang diketik secara implisit). Di C#-9, kita tidak perlu menyebutkan tipe rekaman pada nama kelas untuk yang baru ekspresi. Mari perbarui kode di atas seperti di bawah ini dan kita akan mendapatkan hasil yang sama.

Penggunaan paling umum dari fitur ini adalah saat mendefinisikan deklarasi bidang. Ini sering kali sangat bagus ketika Anda memiliki banyak pengulangan, seperti dalam penginisialisasi array atau objek:

Penulis: Mukesh Kannan G