Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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:
- Anggota ekstensi
- Penugasan bersyarat null
-
nameofmendukung jenis generik yang tidak terikat -
Konversi implisit lainnya untuk
Span<T>danReadOnlySpan<T> - Pengubah pada parameter lambda sederhana
-
fieldproperti yang dijamin -
partialperistiwa dan konstruktor - operator penugasan gabungan yang ditentukan pengguna
C# versi 13
Dirilis pada November 2024
C# 13 menyertakan fitur baru berikut:
-
paramskoleksi: pengubahparamstidak hanya terbatas pada jenis array. Anda sekarang dapat menggunakanparamsdengan jenis koleksi yang dikenali, termasukSpan<T>, dan jenis antarmuka. - Jenis dan semantik
lockbaru: Jika target pernyataanlockadalah System.Threading.Lock, pengkompilasi menghasilkan kode untuk menggunakan metode Lock.EnterScope() untuk memasukkan cakupan eksklusif.ref structyang dikembalikan dari itu mendukung polaDispose()untuk keluar dari cakupan eksklusif. - Urutan escape baru -
\e: Anda dapat menggunakan\esebagai urutan escape literal karakter untuk karakterESCAPE, UnicodeU+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
reflokal dan konteksunsafedalam iterator dan metode asinkron. - Anda dapat menggunakan jenis
ref structuntuk mengimplementasikan antarmuka. - Anda dapat mengizinkan jenis
ref structsebagai 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
classataustructjenis 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
structtipe. - Parameter opsional dalam ekspresi lambda - Anda dapat menentukan nilai default untuk parameter pada ekspresi lambda.
-
ref readonlyparameter -ref readonlyparameter memberikan kejelasan lebih lanjut untuk API yang mungkin menggunakanrefparameter atauinparameter. -
Alias jenis apa pun - Anda dapat menggunakan direktif
usinguntuk 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:
- Literal string mentah.
- Dukungan matematika generik.
- Atribut generik.
- Literal string UTF-8.
- Baris baru dalam ekspresi interpolasi string.
- Mencantumkan pola.
- Jenis file lokal.
- Anggota yang diperlukan.
- Struktur auto-default.
- Pencocokan pola
Span<char>pada konstantastring. - Cakupan yang diperluas
nameof. - Kata kunci
nintdanuintmasing-masing merupakan alias untuk System.IntPtr dan System.UIntPtrSystem.UIntPtr. -
refkolom danscoped ref - Meningkatkan konversi grup metode untuk mendelegasikan.
- Gelombang peringatan 7
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#:
- Struktur rekaman
- Peningkatan jenis struktur
- Penangan string terinterpolasi
-
global usingarahan - Deklarasi namespace dengan ruang lingkup file
- Pola properti yang diperluas
- Ekspresi Lambda dapat memiliki jenis alami, di mana pengkompilasi dapat menyimpulkan jenis delegasi dari ekspresi lambda atau grup metode.
- Ekspresi Lambda dapat mendeklarasikan jenis pengembalian saat pengkompilasi tidak dapat menyimpulkannya.
- Atribut dapat diterapkan ke ekspresi lambda.
- Dalam C# 10, string
constdapat diinisialisasi menggunakan interpolasi string jika semua placeholder adalah string konstan. - Anda dapat menambahkan pengubah
sealedsaat mengambil alihToStringdalam rekaman jenis di C# 10. - Peringatan untuk penugasan yang pasti dan analisis keadaan null lebih akurat.
- Izinkan penugasan dan deklarasi terjadi dalam dekonstruksi yang sama.
-
Izinkan atribut
AsyncMethodBuilderpada metode - Atribut CallerArgumentExpression
- C# 10 mendukung format baru untuk pragma
#line.
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:
- Rekaman
- Pengatur khusus init
- Pernyataan tingkat tinggi
- Peningkatan pencocokan pola: pola relasional dan pola logis
- Performa dan interoperabilitas
- Fitur ketepatan dan penyelesaian
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
andmembutuhkan kedua pola untuk sesuai -
Pola disjungtif
ormengharuskan salah satu pola untuk cocok -
Pola ternegasi
notmengharuskan 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
nintdannuintmemodelkan jenis bilangan bulat ukuran asli pada CPU target. - Penunjuk fungsi menyediakan fungsionalitas seperti delegasi sambil menghindari alokasi yang diperlukan untuk membuat objek delegasi.
- Instriksi
localsinitdapat 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 perulanganforeach - 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 readonly
- Anggota antarmuka default
-
Penyempurnaan pencocokan pola:
- Beralih ekspresi
- Pola properti
- Pola tupel
- Pola posisional
- Menggunakan deklarasi
- Fungsi lokal statis
- Struktur ref sekali pakai
- Jenis referensi yang dapat diubah ke null
- Stream asinkron
- Indeks dan rentang
- Penetapan penggabungan null
- Jenis terkonstruksi yang tak dikelola
- Stackalloc dalam ekspresi berlapis
- Peningkatan string verbatim dengan interpolasi
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
refvariabel lokal. - Anda dapat menggunakan penginisialisasi pada
stackallocarray. - Anda dapat menggunakan pernyataan
fixeddengan 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
inditingkatkan. - Resolusi kelebihan muatan kini memiliki kasus ambigu yang lebih sedikit.
Opsi pengompilasi baru adalah:
-
-publicsignuntuk mengaktifkan penandatanganan himpunan Open Source Software (OSS). -
-pathmapuntuk 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
fixeddengan 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 parameterinke metode anggotanya. - Tambahkan pengubah
inpada parameter, untuk menentukan bahwa argumen diteruskan oleh referensi tetapi tidak diubah menurut metode yang dipanggil. - Gunakan pengubah
ref readonlypada 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 protectedpengubah akses- Pengubah akses
private protectedmemungkinkan akses pada kelas turunan dalam "assembly" yang sama.
- Pengubah akses
-
refEkspresi bersyarah:- hasil ekspresi bersyarat (
?:) kini dapat berupa referensi.
- hasil ekspresi bersyarat (
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:
-
asyncMainmetode- Titik entri untuk aplikasi dapat memiliki pengubah
async.
- Titik entri untuk aplikasi dapat memiliki pengubah
-
defaultekspresi 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:
- Variabel out
- Tupel dan dekonstruksi
- Pencocokan pola
- Fungsi lokal
- Anggota dengan tubuh ekspresi yang diperluas
- Lokal Ref
- Ref return
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:
- Impor statik
- Filter pengecualian
- Penginisialisasi properti otomatis
- Anggota yang dilengkapi ekspresi
- Penghantar null
- Interpolasi string
- Operator nameof
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:
- Pengikatan dinamis
- Argumen bernama/opsional
- Kovarian dan kontravarian generik
- Jenis interop tersematkan
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:
- Properti yang diimplementasikan secara otomatis
- Jenis anonim
- Ekspresi kueri
- Ekspresi Lambda
- Pohon Ekspresi
- Ekstensi metode
- Variabel lokal yang ditik secara implisit
- Metode parsial
- Penginisialisasi objek dan koleksi
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:
- Generik
- Jenis parsial
- Metode anonim
- Jenis nilai yang dapat diubah ke null
- Iterator
- Kovarian dan kontravarian
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.