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 dalam repositori dotnet/roslyn di GitHub. Untuk menemukan kapan fitur tertentu ditambahkan ke bahasa, lihat riwayat versi C# di repositori dotnet/csharplang di 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 14

Dirilis pada November 2025

C# 14 menyertakan fitur baru berikut:

C# versi 13

Dirilis pada November 2024

C# 13 menyertakan fitur baru berikut:

  • params koleksi: pengubah params tidak hanya terbatas pada jenis array. Anda sekarang dapat menggunakan params dengan jenis koleksi yang dikenali, termasuk Span<T>, dan jenis antarmuka.
  • Jenis dan semantik lock baru: Jika target pernyataan lock adalah System.Threading.Lock, pengkompilasi menghasilkan kode untuk menggunakan metode Lock.EnterScope() untuk memasukkan cakupan eksklusif. ref struct yang dikembalikan dari itu mendukung pola Dispose() untuk keluar dari cakupan eksklusif.
  • Urutan escape baru - \e: Anda dapat menggunakan \e sebagai urutan escape literal karakter untuk karakter ESCAPE, Unicode U+001B.
  • Pengoptimalan kecil untuk resolusi kelebihan beban yang melibatkan grup metode.
  • Akses pengindeks implisit dalam penginisialisasi objek: Operator indeks implisit "dari akhir", ^, sekarang diizinkan dalam ekspresi penginisialisasi objek.
  • Anda dapat menggunakan ref lokal dan konteks unsafe dalam iterator dan metode asinkron.
  • Anda dapat menggunakan jenis ref struct untuk mengimplementasikan antarmuka.
  • Anda dapat mengizinkan jenis ref struct sebagai argumen untuk parameter jenis dalam generik.
  • Properti parsial dan pengindeks sekarang diizinkan dalam tipe partial.
  • Prioritas resolusi kelebihan beban memungkinkan penulis pustaka untuk menunjuk satu kelebihan beban sebagai lebih baik daripada yang lain.

C# versi 12

Dirilis November 2023

Fitur berikut ditambahkan di C# 12:

  • Konstruktor utama - Anda dapat membuat konstruktor utama pada class atau struct jenis apa pun.
  • Ekspresi koleksi - Sintaks baru untuk menentukan ekspresi koleksi, termasuk elemen spread, (..e), untuk memperluas koleksi apa pun.
  • Array In-line - Array in-line memungkinkan Anda membuat array dengan ukuran tetap dalam satu struct tipe.
  • Parameter opsional dalam ekspresi lambda - Anda dapat menentukan nilai default untuk parameter pada ekspresi lambda.
  • ref readonly parameter - ref readonly parameter memberikan kejelasan lebih lanjut untuk API yang mungkin menggunakan ref parameter atau in parameter.
  • Alias jenis apa pun - Anda dapat menggunakan direktif using untuk membuat alias dari jenis apa pun, bukan hanya dari jenis yang memiliki nama.
  • 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 pada 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 mempermudah penggunaan jenis struct, seperti anggota wajib dan struktur default otomatis. Bekerja dengan string menjadi lebih mudah dengan raw string literal, baris baru dalam interpolasi string, dan string literal 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

Diterbitkan November 2021

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

C# 10 terus mengerjakan tema menghapus upacara, memisahkan data dari algoritma, dan meningkatkan performa untuk runtime .NET.

Banyak fitur berarti Anda mengetik lebih sedikit kode untuk mengekspresikan konsep yang sama. Struct rekaman menghasilkan banyak metode yang sama dengan yang dilakukan kelas rekaman. Jenis struct dan anonim mendukung dengan ekspresi. Menggunakan direktif global dan deklarasi namespace cakupan berkas berarti Anda mengekspresikan dependensi dan organisasi namespace dengan lebih jelas. Peningkatan Lambda memudahkan untuk mendeklarasikan ekspresi lambda di mana mereka digunakan. Peningkatan pola dan dekonstruksi properti baru membuat kode yang lebih ringkas.

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

C# 10 juga menandai lebih banyak pergeseran ke irama 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 di dalam antarmuka dapat digunakan, tetapi fitur pratinjau ini dapat berubah sebelum rilis final mereka.

C# versi 9

Diterbitkan November 2020

C# 9 dirilis dengan .NET 5. Ini adalah 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. Tidak terlalu diperlukan adanya formalitas: namespace, kelas Program, dan static void Main() semuanya tidak diperlukan.

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 tipe mencocokkan objek dengan jenis tertentu
  • Pola tanda kurung memberlakukan atau menekankan prioritas kombinasi pola
  • Pola konjungtif and membutuhkan kedua pola untuk sesuai
  • Pola disjungtif or mengharuskan salah satu pola untuk 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. 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 switch pernyataan case.

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 interoperabilitas

Serangkaian peningkatan lain mendukung skenario ketika generator kode menambahkan fungsionalitas:

  • Penginisialisasi modul adalah metode yang dipanggil oleh lingkungan runtime ketika rakitan sedang dimuat.
  • Metode parsial mendukung pengubah akses baru dan jenis pengembalian yang tidak kosong. Dalam kasus tersebut, harus dilakukan penerapan.

Kualitas penyelesaian dan perakitan

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

  • Ekspresi berjenis target new
  • 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 melanjutkan upaya untuk menjaga C# tetap menjadi bahasa pemrograman berorientasi umum yang modern. Fitur-fitur terus mendukung beban kerja modern dan jenis aplikasi.

C# versi 8.0

Diterbitkan September 2019

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

Anggota antarmuka default memerlukan peningkatan dalam Common Language Runtime (CLR). Fitur-fitur tersebut ditambahkan di CLR untuk .NET Core 3.0. Rentang, indeks, dan aliran asinkron memerlukan jenis baru di pustaka .NET Core 3.0. Jenis referensi nullable, saat diterapkan di compiler, jauh lebih berguna ketika pustaka dianotasi untuk memberikan informasi semantik mengenai status null argumen dan nilai yang dikembalikan. Anotasi tersebut sedang ditambahkan di pustaka .NET Core.

C# versi 7.3

Dirilis Mei 2018

Ada dua tema pada rilis C# 7.3. Tema menyediakan fitur yang memungkinkan kode aman dapat berjalan secepat kode tidak aman. 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 kolom tetap tanpa melakukan penyematan.
  • 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 pengembalian 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 himpunan 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.
  • Akses bidang tetap tanpa penyematan.
  • Menetapkan ulang variabel lokal ref.
  • Nyatakan jenis readonly struct, untuk menunjukkan bahwa struktur tidak dapat diubah dan harus diberikan 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 tipe ref struct, untuk menunjukkan bahwa tipe struct mengakses memori terkelola secara langsung dan harus selalu dialokasikan di stack.
  • Gunakan batasan umum lainnya.
  • Argumen bernama non-trailing:
    • Argumen posisi dapat mengikuti argumen bernama.
  • Garis bawah di awal dalam teks literal numerik:
    • Harfiah numerik sekarang dapat memiliki garis bawah terkemuka sebelum digit yang dicetak.
  • private protected pengubah akses
    • Pengubah akses private protected memungkinkan akses pada kelas turunan dalam "assembly" 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:

  • async Main metode
    • Titik entri untuk aplikasi dapat memiliki pengubah async.
  • 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 tipe generik
    • Anda dapat menggunakan ekspresi pencocokan pola pada variabel dengan tipe parameter generik.

Terakhir, pengkompilasi memiliki dua opsi -refout dan -refonly yang mengendalikan pembuatan perakitan referensi.

C# versi 7.0

Dirilis Maret 2017

C# versi 7.0 dirilis dengan Visual Studio 2017. Versi ini memiliki beberapa hal evolusioner dan keren seperti 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 adalah meringkas deklarasi variabel menggunakan kata kunci out dan memungkinkan pengembalian beberapa nilai melalui tuple. .NET Core sekarang menargetkan sistem operasi manapun dan memiliki fokus utama pada cloud dan portabilitas. Kemampuan baru ini tentu menyita pemikiran dan waktu para perancang bahasa, selain juga memikirkan fitur-fitur baru.

C# versi 6.0

Diriliskan 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
  • Tunggu dalam blok 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 lain yang dilakukan dalam versi ini, meskipun itu sendiri bukan merupakan fitur bahasa tradisional. 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 dengan Visual Studio 2012, adalah versi bahasa yang berfokus. Hampir semua upaya untuk versi tersebut didedikasikan untuk konsep bahasa terobosan lain: model async dan await untuk pemrograman asinkron. Berikut daftar fitur utamanya:

Atribut info pemanggil memungkinkan Anda dengan mudah mengambil informasi tentang konteks di mana kode Anda berjalan tanpa menggunakan banyak kode refleksi boilerplate. Hal ini memiliki banyak penggunaan dalam diagnostik dan tugas pengelogan.

async dan await adalah bintang sebenarnya dari rilis ini. Saat fitur ini diperkenalkan pada tahun 2012, C# sekali lagi mengubah permainan dengan mengintegrasikan asinkroni ke dalam bahasa sebagai fitur utama.

C# versi 4.0

Dirilis pada 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 yang diperkenalkan dalam C# versi 4.0 menambahkan kemampuan untuk mengesampingkan pengetikan saat waktu kompilasi pada compiler. 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 memberikan potensi untuk kesalahan, tetapi juga kekuatan besar dalam bahasa ini.

C# versi 3.0

Dirilis November 2007

C# versi 3.0 dirilis pada akhir 2007, bersama dengan Visual Studio 2008, meskipun set lengkap fitur bahasa sebenarnya hadir pada .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 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 pada November 2005

Mari kita lihat beberapa fitur utama C# 2.0, dirilis pada 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, tipe dan metode dapat beroperasi pada tipe arbitrer sambil tetap menjaga keamanan tipe. Misalnya, memiliki List<T> memungkinkan Anda mendapatkan List<string> atau List<int> dan melakukan operasi aman-tipe pada string atau integer tersebut saat Anda melakukan iterasi pada mereka. 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 tipe enumerable 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 pada April 2003

C# versi 1.2 dikirim dengan Visual Studio .NET 2003. Itu berisi beberapa peningkatan kecil pada bahasa. Yang paling penting adalah bahwa dalam versi ini, kode yang dihasilkan dalam perulangan foreach yang disebut Dispose pada IEnumerator ketika IEnumerator menerapkan IDisposable.

C# versi 1.0

Dirilis Januari 2002

Ketika Anda kembali dan melihat, C# versi 1.0, dirilis dengan Visual Studio .NET 2002, terlihat sangat seperti Java. Sebagai bagian dari tujuan desain yang dinyatakan untuk ECMA, bahasa ini berusaha menjadi "bahasa sederhana, modern, dan berorientasi objek umum." Pada saat itu, kemiripannya dengan Java menunjukkan bahwa tujuan desain awal telah tercapai.

Tetapi, jika mengingat kembali C# 1.0 sekarang, Anda mungkin agak kebingungan. Bahasa pemrograman ini tidak memiliki kapabilitas asinkron bawaan dan beberapa fungsionalitas canggih terkait generik yang sering dianggap remeh. Faktanya, sama sekali tidak ada 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 mendapati diri Anda menulis kode yang terlalu panjang. 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 di blog NDepend, yang merupakan sumber Erik Dietrich dan Patrick Smacchia.