Bagikan melalui


Sejarah C #

Artikel ini menyediakan riwayat setiap rilis utama bahasa C#. Tim C# terus berinovasi dan menambahkan fitur baru. Status fitur bahasa terperinci, termasuk fitur yang dipertimbangkan untuk rilis mendatang dapat ditemukan di repositori dotnet/roslyn pada GitHub.

Penting

Bahasa C# mengandalkan jenis dan metode yang ditentukan sebagai pustaka standar dalam spesifikasi C# untuk beberapa fiturnya. Platform .NET memberikan jenis dan metode tersebut dalam sejumlah paket. Salah satu contohnya adalah pemrosesan pengecualian. Setiap pernyataan atau ekspresi throw diperiksa untuk memastikan objek yang dilemparkan berasal dari Exception. Demikian pula, setiap catch diperiksa untuk memastikan bahwa jenis yang tertangkap berasal dari Exception. Setiap versi dapat menambahkan persyaratan baru. Untuk menggunakan fitur bahasa terbaru di lingkungan yang lebih lama, Anda mungkin perlu menginstal pustaka tertentu. Dependensi ini didokumentasikan di halaman untuk setiap versi tertentu. Anda dapat mempelajari selengkapnya tentang hubungan antara bahasa dan pustaka untuk latar belakang pada dependensi ini.

C# versi 12

Dirilis November 2023

Fitur berikut ditambahkan di C# 12:

  • Konstruktor utama - Anda dapat membuat konstruktor utama dalam jenis atau struct apa punclass.
  • Ekspresi koleksi - Sintaks baru untuk menentukan ekspresi koleksi, termasuk elemen spread, (..e), untuk memperluas koleksi apa pun.
  • Array sebaris - Array sebaris memungkinkan Anda membuat array dengan ukuran tetap dalam satu struct jenis.
  • Parameter opsional dalam ekspresi lambda - Anda dapat menentukan nilai default untuk parameter pada ekspresi lambda.
  • ref readonly - ref readonly parameter parameter memungkinkan lebih banyak kejelasan untuk API yang mungkin menggunakan ref parameter atau in parameter.
  • Alias jenis apa pun - Anda dapat menggunakan using direktif alias untuk alias jenis apa pun, bukan hanya jenis bernama.
  • Atribut eksperimental - Menunjukkan fitur eksperimental.

Dan, Interceptors - dirilis sebagai fitur Pratinjau.

Secara keseluruhan, C# 12 menyediakan fitur baru yang membuat Anda lebih produktif menulis kode C#. Sintaks yang sudah Anda ketahui tersedia di lebih banyak tempat. Sintaks lainnya memungkinkan konsistensi untuk konsep terkait.

C# versi 11

Dirilis November 2022

Fitur berikut ditambahkan dalam C# 11:

C# 11 memperkenalkan matematika generik dan beberapa fitur yang mendukung tujuan tersebut. Anda dapat menulis algoritma numerik sekali untuk semua jenis angka. Ada lebih banyak fitur untuk membuat bekerja dengan struct jenis lebih mudah, seperti anggota yang diperlukan dan struktur default otomatis. Bekerja dengan string menjadi lebih mudah dengan literal string Mentah, baris baru dalam interpolasi string, dan literal string UTF-8. Fitur seperti jenis lokal file memungkinkan generator sumber menjadi lebih sederhana. Terakhir, pola daftar menambahkan lebih banyak dukungan untuk pencocokan pola.

C# versi 10

Dirilis November 2021

C# 10 menambahkan fitur dan peningkatan berikut ke bahasa C#:

Lebih banyak fitur tersedia dalam mode pratinjau . Untuk menggunakan fitur ini, Anda harus mengatur <LangVersion> ke Preview di proyek Anda:

C# 10 terus meningkatkan tema penghapusan upacara, memisahkan data dari algoritma, dan performa yang ditingkatkan untuk .NET Runtime.

Banyak fitur berarti Anda mengetik lebih sedikit kode untuk mengekspresikan konsep yang sama. Catat struct mempersatukan banyak metode yang sama yang dilakukan kelas catatan. Jenis struct dan anonim mendukung dengan ekspresi. Global menggunakan direktif dan deklarasi namespace cakupan file berarti Anda mengekspresikan dependensi dan organisasi namespace lebih jelas. Peningkatan Lambda memudahkan untuk mendeklarasikan ekspresi lambda tempat mereka digunakan. Peningkatan pola dan dekonstruksi properti baru membuat kode yang lebih ringkas.

Penangan string terinterpolasi baru dan perilaku AsyncMethodBuilder dapat meningkatkan performa. Fitur bahasa ini diterapkan dalam .NET Runtime untuk mencapai peningkatan performa di .NET 6.

C# 10 juga menandai lebih banyak pergeseran ke ritme tahunan untuk rilis .NET. Karena tidak setiap fitur dapat diselesaikan dalam jangka waktu tahunan, Anda dapat mencoba beberapa fitur "pratinjau" di C# 10. Atribut generik dan anggota abstrak statis dalam antarmuka dapat digunakan, tetapi fitur pratinjau ini dapat berubah sebelum rilis terakhir mereka.

C# versi 9

Dirilis November 2020

C# 9 dirilis bersama .NET 5. Merupakan versi bahasa default untuk rakitan apa pun yang menargetkan rilis .NET 5. Berisi fitur baru dan yang ditingkatkan berikut:

C# 9 melanjutkan tiga tema dari rilis sebelumnya: menghapus upacara, memisahkan data dari algoritma, dan menyediakan lebih banyak pola di lebih banyak tempat.

Pernyataan tingkat tinggi berarti program utama Anda lebih mudah dibaca. Upacara tidak begitu dibutuhkan: namespace, kelas Program, dan static void Main() tidak perlu.

Pengenalan records menyediakan sintaks ringkas untuk jenis referensi yang mengikuti semantik nilai untuk kesetaraan. Anda menggunakan jenis ini untuk menentukan kontainer data yang biasanya menentukan perilaku minimal. Setter khusus init menyediakan kemampuan untuk mutasi (with ekspresi) nondestruktif dalam rekaman. C# 9 juga menambahkan jenis pengembalian kovarian sehingga rekaman turunan dapat mengambil alih metode virtual dan mengembalikan jenis yang berasal dari jenis pengembalian metode dasar.

Kemampuan pencocokan pola diperluas dalam beberapa cara. Jenis numerik sekarang mendukung pola rentang. Pola dapat digabungkan menggunakan pola and, or, dan not. Tanda kurung dapat ditambahkan untuk mengklarifikasi pola yang lebih kompleks:

C# 9 mencakup peningkatan pencocokan pola baru, yaitu:

  • Pola jenis sesuai dengan objek yang cocok dengan jenis tertentu
  • Pola tanda kurung memberlakukan atau menekankan prioritas kombinasi pola
  • Pola konjungtif and mengharuskan kedua pola cocok
  • Pola disjungtif or mengharuskan salah satu pola cocok
  • Pola ternegasi not mengharuskan suatu pola tidak cocok
  • Pola relasional mengharuskan input kurang dari, lebih besar dari, kurang dari atau sama dengan, atau lebih besar dari atau sama dengan konstanta tertentu

Pola-pola tersebut memperkaya sintaksis untuk pola. Pertimbangkan contoh berikut:

public static bool IsLetter(this char c) =>
    c is >= 'a' and <= 'z' or >= 'A' and <= 'Z';

Dengan tanda kurung opsional untuk memperjelas bahwa and memiliki prioritas lebih tinggi daripada or:

public static bool IsLetterOrSeparator(this char c) =>
    c is (>= 'a' and <= 'z') or (>= 'A' and <= 'Z') or '.' or ',';

Salah satu penggunaannya yang paling umum adalah sintaksis baru untuk pemeriksaan null:

if (e is not null)
{
    // ...
}

Salah satu pola ini dapat digunakan dalam konteks apa pun yang diperbolehkan: ekspresi pola is, ekspresi switch, pola berlapis, dan pola label case pernyataan switch.

Serangkaian fitur lain mendukung komputasi berperforma tinggi di C#:

  • Jenis nint dan nuint memodelkan jenis bilangan bulat ukuran asli pada CPU target.
  • Penunjuk fungsi menyediakan fungsionalitas seperti delegasi sambil menghindari alokasi yang diperlukan untuk membuat objek delegasi.
  • Instriksi localsinit dapat dihilangkan untuk menyimpan instruksi.

Performa dan interop

Serangkaian peningkatan lain mendukung skenario ketika generator kode menambahkan fungsionalitas:

  • Penginisialisasi modul adalah metode yang dipanggil runtime bahasa umum saat rakitan sedang memuat.
  • Metode parsial mendukung pengubah akses baru dan jenis pengembalian yang tidak kosong. Dalam kasus tersebut, harus dilakukan penerapan.

Fitur fit and finish

C# 9 menambahkan banyak fitur kecil lainnya yang meningkatkan produktivitas pengembang, baik menulis maupun membaca kode:

  • Ekspresi new berjenis target
  • Fungsi anonim static
  • Ekspresi bersyarat berjenis target
  • Dukungan GetEnumerator() ekstensi untuk perulangan foreach
  • Ekspresi Lambda dapat mendeklarasikan parameter buang
  • Atribut dapat diterapkan untuk fungsi lokal

Rilis C# 9 meneruskan pekerjaan yang menjaga C# bahasa pemrogram yang bertujuan umum dan modern. Fitur-fitur terus mendukung beban kerja modern dan jenis aplikasi.

C# versi 8.0

Dirilis September 2019

C# 8.0 adalah rilis C# besar pertama yang secara spesifik menargetkan .NET Core. Beberapa fitur mengandalkan kemampuan Common Language Runtime (CLR) baru, yang lain pada jenis pustaka yang ditambahkan hanya di .NET Core. C# 8.0 menambahkan fitur berikut dan peningkatan ke bahasa komputer C#:

Anggota antarmuka default memerlukan peningkatan dalam CLR. Fitur tersebut ditambahkan di CLR untuk .NET Core 3.0. Rentang dan indeks, dan stream asinkron memerlukan jenis baru di pustaka .NET Core 3.0. Jenis referensi yang dapat diubah ke null, saat diterapkan di compiler, jauh lebih berguna ketika pustaka diannotasi untuk memberikan informasi semantik mengenai status null argumen dan nilai yang dikembalikan. Anotasi tersebut ditambahkan di pustaka .NET Core.

C# versi 7.3

Dirilis Mei 2018

Ada dua tema pada rilis C# 7.3. Tema pertama memberikan fitur yang memungkinkan kode terkendali agar dapat berfungsi seperti kode tak terkelola. Tema kedua memberikan peningkatan bertambah bertahap ke fitur yang ada. Opsi compiler baru juga ditambahkan ke dalam rilis ini.

Fitur baru berikut mendukung tema performa yang lebih baik untuk kode terkendali:

  • Anda dapat mengakses bidang tetap tanpa menyematkan.
  • Anda dapat menetapkan kembali ref variabel lokal.
  • Anda dapat menggunakan penginisialisasi pada stackalloc array.
  • Anda dapat menggunakan pernyataan fixed dengan jenis apa pun yang mendukung pola.
  • Anda dapat menggunakan batasan yang lebih generik.

Peningkatan berikut dilakukan ke fitur yang ada:

  • Anda dapat menguji == dan != dengan jenis tuple.
  • Anda dapat menggunakan variabel ekspresi di lebih banyak lokasi.
  • Anda dapat melampirkan atribut ke bidang dukungan properti yang diimplementasikan secara otomatis.
  • Resolusi metode ketika argumen berbeda dengan in ditingkatkan.
  • Resolusi kelebihan muatan kini memiliki kasus ambigu yang lebih sedikit.

Opsi pengompilasi baru adalah:

  • -publicsign untuk mengaktifkan penandatanganan rakitan Open Source Software (OSS).
  • -pathmap untuk memberikan pemetaan untuk direktori sumber.

C# versi 7.2

Dirilis November 2017

C# 7.2 menambahkan beberapa fitur bahasa kecil:

  • Inisialisasi pada array stackalloc.
  • Gunakan pernyataan fixed dengan jenis apa pun yang mendukung pola.
  • Bidang tetap akses tanpa penyematan.
  • Menetapkan ulang variabel lokal ref.
  • Nyatakan jenis readonly struct, untuk menunjukkan bahwa struct dapat diubah dan harus diteruskan sebagai parameter in ke metode anggotanya.
  • Tambahkan pengubah in pada parameter, untuk menentukan bahwa argumen diteruskan oleh referensi tetapi tidak diubah menurut metode yang dipanggil.
  • Gunakan pengubah ref readonly pada kembali metode, untuk menunjukkan bahwa metode mengembalikan nilainya menurut referensi, tetapi tidak mengizinkan menulis objek tersebut.
  • Nyatakan jenis ref struct, untuk menunjukkan bahwa jenis struct mengakses memori terkelola langsung dan harus selalu dialokasikan stack.
  • Gunakan batasan generik tambahan.
  • Argumen bernama non-trailing:
    • Argumen posisi dapat mengikuti argumen bernama.
  • Garis bawah terkemuka dalam literal numerik:
    • Harfiah numerik sekarang dapat memiliki garis bawah terkemuka sebelum digit yang dicetak.
  • private protected pengubah akses:
    • Akses pengubah private protected memungkinkan akses untuk kelas turunan di rakitan yang sama.
  • ref Ekspresi bersyarah:
    • hasil ekspresi bersyarat (?:) kini dapat berupa referensi.

C# versi 7.1

Dirilis Agustus 2017

C# mulai merilis rilis titik dengan C# 7.1. Versi ini ditambahkan konfigurasi elemen pemilihan versi bahasa, tiga fitur bahasa baru, dan perilaku compiler baru.

Fitur bahasa baru dalam rilis ini adalah:

  • asyncMain metode
    • Titik entri untuk penerapan dapat memiliki pengubahasync.
  • default ekspresi harfiah
    • Anda dapat menggunakan ekspresi harfiah default di ekspresi nilai default saat jenis target dapat disimpulkan.
  • Nama elemen tuple yang disimpulkan
    • Nama elemen tuple dapat disimpulkan dari inisialisasi tuple di banyak kasus.
  • Pencocokan pola pada parameter jenis generik
    • Anda dapat menggunakan ekspresi pola cocok pada variabel dengan jenis yang merupakan parameter jenis generik.

Terakhir, pengkompilasi memiliki dua opsi -refout dan -refonly pembuatan perakitan referensi kontrol tersebut.

C# versi 7.0

Dirilis Maret 2017

C# versi 7.0 dirilis bersama Visual Studio 2017. Versi ini memiliki beberapa hal evolusioner dan keren di pembuluh darah C# 6.0. Berikut beberapa fitur barunya:

Fitur lain mencakup:

Semua fitur ini menawarkan kemampuan baru bagi pengembang dan kesempatan untuk menulis kode yang lebih bersih dari sebelumnya. Sorotan memadatkan deklarasi variabel untuk digunakan dengan kata kunci out dan dengan mengizinkan beberapa nilai kembali melalui tuple. .NET Core kini menargetkan semua sistem operasi dan hanya memilih cloud dan probabilitas. Kemampuan tersebut tentu memanfaatkan pemikiran dan waktu perancang bahasa, sebagai tambahan fitur baru yang akan dirilis.

C# versi 6.0

Dirilis Juli 2015

Versi 6.0, dirilis dengan Visual Studio 2015, merilis banyak fitur lebih kecil yang membuat pemrograman C# lebih produktif. Berikut adalah beberapa di antaranya:

Fitur baru lainnya mencakup:

  • Penginisialisasi indeks
  • Block await in catch/finally
  • Nilai default untuk properti getter-only

Jika Anda melihat fitur-fitur ini bersama-sama, Anda akan melihat pola yang menarik. Dalam versi ini, C# mulai menghilangkan boilerplate bahasa untuk membuat kode lebih terse dan dapat dibaca. Jadi, bagi mereka yang lebih suka kode yang lebih rapi dan sederhana, versi bahasa ini wajib dimiliki.

Ada satu hal yang dilakukan dalam versi ini, meski bukan fitur bahasa tradisional sendiri. Roslyn the compiler dirilis sebagai layanan. Compiler C# kini ditulis dalam C#, dan Anda dapat menggunakan compiler sebagai bagian dari upaya pemrograman Anda.

C# versi 5.0

Dirilis Agustus 2012

C# versi 5.0, dirilis bersama Visual Studio 2012, adalah versi bahasa yang berfokus. Hampir semua upaya untuk versi tersebut masuk ke konsep bahasa terobosan lain: model async dan await untuk pemrograman asinkron. Berikut daftar fitur utamanya:

Pemanggil atribut info memungkinkan Anda mengambil informasi dengan mudah tentang konteks yang Anda jalankan tanpa menggunakan ribuan kode cerminan boilerplate. Hal ini memiliki banyak penggunaan dalam diagnostik dan tugas pengelogan.

Tetapi, async dan await adalah hal utama dari rilis ini. Saat fitur tersebut dirilis tahun 2012, C# membawa perubahan lagi dengan mengubah asinkron menjadi bahasa sebagai peserta kelas pertama.

C# versi 4.0

Dirilis April 2010

C# versi 4.0, dirilis dengan Visual Studio 2010, memperkenalkan beberapa fitur baru yang menarik:

Jenis interop yang disematkan meringankan beban penyebaran pembuatan rakitan interop COM untuk aplikasi Anda. Kovarian dan kontravarian generik memberi Anda lebih banyak keleluasaan untuk menggunakan generik, tetapi bersifat lebih akademis dan mungkin paling dihargai oleh kerangka kerja dan penulis pustaka. Parameter bernama dan opsional memungkinkan Anda menghapus banyak metode dengan beban berlebih dan memberikan kenyamanan. Tetapi fitur tersebut sama sekali tidak mengubah paradigma.

Fitur utamanya adalah pengenalan dynamic kata kunci. dynamic Kata kunci disertakan ke dalam C# versi 4.0 kemampuan untuk mengambil alih compiler pada compile-time typing. Dengan menggunakan kata kunci dinamis, Anda dapat membuat konstruksi mirip dengan bahasa yang diberi jenis secara dinamis seperti JavaScript. Anda dapat membuat dynamic x = "a string" lalu menambahkan enam di sana, membiarkan runtime memutuskan apa yang akan terjadi setelahnya.

Pengikatan dinamis memiliki kemungkinan kesalahan, tetapi juga merupakan cara bagus dalam bahasa ini.

C# versi 3.0

Dirilis November 2007

C# versi 3.0 dirilis pada akhir 2007, bersama dengan Visual Studio 2008, meskipun keseluruhan fitur bahasa sebenarnya akan datang bersama .NET Framework versi 3.5. Versi ini menandai perubahan besar dalam pertumbuhan C#. Hal ini membuat C# menjadi bahasa pemrograman yang benar-benar tangguh. Mari kita lihat beberapa fitur utama dalam versi ini:

Di retrospeksi, sebagian besar fitur ini tampak tidak dapat dihindari dan tidak dapat dipisahkan. Semua fitur itu cocok secara strategis. Fitur pembunuh versi C# ini adalah ekspresi kueri, juga dikenal sebagai Language-Integrated Query (LINQ).

Tampilan yang lebih bernuansa memeriksa pohon ekspresi, ekspresi lambda, dan jenis anonim sebagai fondasi di atas tempat LINQ dibangun. Tetapi, dalam kasus tersebut, C# 3.0 menyajikan konsep yang revolusioner. C# 3.0 mulai meletakkan dasar untuk mengubah C# menjadi bahasa hibrid Object-Oriented / Functional.

Secara khusus, Anda kini dapat menulis bergaya SQL, kueri deklaratif untuk melakukan operasi pada koleksi, selain fitur lainnya. Sebagai ganti menulis perulangan for untuk mengomputasi rata-rata daftar integer, kini Anda dapat melakukannya sesederhana list.Average(). Kombinasi ekspresi kueri dan metode ekstensi membuat daftar bilangan bulat jauh lebih cerdas.

C# versi 2.0

Dirilis November 2005

Mari kita lihat beberapa fitur utama C# 2.0, yang dirilis tahun 2005, bersama dengan Visual Studio 2005:

Fitur C# 2.0 lainnya menambahkan kemampuan ke fitur yang ada:

  • Aksesibilitas getter/setter terpisah
  • Konversi grup metode (delegasi)
  • Kelas statik
  • Mendelegasikan inferensi

Sementara C# dimulai sebagai bahasa generik Object-Oriented (OO), C# versi 2.0 mengubahnya dengan terburu-buru. Dengan generik, jenis dan metode dapat beroperasi pada jenis arbitrer saat tetap menjaga keamanan jenis. Misalnya, memiliki List<T> memungkinkan Anda mendapatkan List<string> atau List<int> dan melakukan operasi yang ramah jenis pada string atau integer tersebut saat Anda mengulangi melaluinya. Menggunakan generik lebih baik daripada membuat jenisListInt yang berasal dari ArrayList atau mentransmisikan dari Object untuk setiap operasi.

C# versi 2.0 membawa iterator. Singkatnya, iterator memungkinkan Anda memeriksa semua item di List (atau jenis Yang dapat dihitung lainnya) dengan perulangan foreach. Memiliki iterator sebagai bagian bahasa kelas pertama meningkatkan secara drastis keterbacaan bahasa dan kemampuan orang untuk memahami kode.

C# versi 1.2

Dirilis April 2003

C# versi 1.2 dilengkapi dengan Visual Studio .NET 2003. C# berisi beberapa peningkatan kecil pada bahasanya. Yang paling dikenal adalah mulai versi ini, kode tersebut membuat perulangan foreach yang disebut Dispose pada IEnumerator saat IEnumerator tersebut menerapkan IDisposable.

C# versi 1.0

Dirilis Januari 2002

Ketika diingat kembali, C# versi 1.0, dirilis dengan Visual Studio .NET 2002, sangat mirip dengan Java. Sebagai bagian dari tujuan desain yang dinyatakan untuk ECMA, C# berusaha menjadi "bahasa sederhana, modern, berorientasi objek, dan bertujuan umum". Pada saat itu, terlihat seperti Java berarti C# mencapai tujuan desain awal tersebut.

Tetapi, jika mengingat kembali C# 1.0 sekarang, Anda mungkin agak kebingungan. C# ini tidak memiliki kemampuan asinkron bawaan dan fungsi andalnya yang generik tidak Anda gunakan. Malah, C# tidak memiliki fungsi generik. Selain itu, LINQ? Belum tersedia. Fungsi tambahan tersebut perlu beberapa tahun hingga diluncurkan.

C# versi 1.0 tampak tidak memiliki fitur, jika dibandingkan dengan yang sekarang. Anda akan menghabiskan waktu untuk menulis kode. Bagaimanapun juga, Anda harus tetap memulai. C# versi 1.0 adalah alternatif yang layak untuk Java di platform Windows.

Fitur utama C# 1.0 meliputi:

Artikelawalnya diterbitkan pada blog NDepend, atas nama Erik Dietrich dan Patrick Smacchia.