C# (dibaca:
C sharp) merupakan sebuah
bahasa pemrograman yang
berorientasi objek yang dikembangkan oleh
Microsoft sebagai bagian dari inisiatif kerangka
.NET Framework. Bahasa pemrograman ini dibuat berbasiskan bahasa
C++ yang telah dipengaruhi oleh aspek-aspek ataupun fitur bahasa yang terdapat pada bahasa-bahasa pemrograman lainnya seperti
Java,
Delphi,
Visual Basic, dan lain-lain) dengan beberapa penyederhanaan. Menurut standar
ECMA-334 C# Language Specification, nama C# terdiri atas sebuah huruf Latin
C (
U+0043) yang diikuti oleh tanda pagar yang menandakan angka
# (
U+0023). Tanda pagar # yang digunakan memang bukan tanda kres dalam seni musik (U+266F), dan tanda pagar # (U+0023) tersebut digunakan karena karakter kres dalam seni musik tidak terdapat di dalam
keyboard standar.
Tujuan Desain
Standar European Computer Manufacturer Association (ECMA) mendaftarkan beberapa tujuan desain dari bahasa pemrograman C#, sebagai berikut:
- Bahasa pemrograman C# dibuat sebagai bahasa pemrograman yang bersifat bahasa pemrograman general-purpose (untuk tujuan jamak), berorientasi objek, modern, dan sederhana.
- Bahasa pemrograman C# ditujukan untuk digunakan dalam mengembangkan komponen perangkat lunak yang mampu mengambil keuntungan dari lingkungan terdistribusi.
- Portabilitas programmer sangatlah penting, khususnya bagi programmer yang telah lama menggunakan bahasa pemrograman C dan C++.
- Dukungan untuk internasionalisasi (multi-language) juga sangat penting.
- C# ditujukan agar cocok digunakan untuk menulis program aplikasi baik dalam sistem klien-server (hosted system) maupun sistem embedded (embedded system), mulai dari perangkat lunak yang sangat besar yang menggunakan sistem operasi yang canggih hingga kepada perangkat lunak yang sangat kecil yang memiliki fungsi-fungsi terdedikasi.
- Meskipun aplikasi C# ditujukan agar bersifat 'ekonomis' dalam hal kebutuhan pemrosesan dan memori komputer, bahasa C# tidak ditujukan untuk bersaing secara langsung dengan kinerja dan ukuran perangkat lunak yang dibuat dengan menggunakan bahasa pemrograman C dan bahasa rakitan.
- Bahasa C# harus mencakup pengecekan jenis (type checking) yang kuat, pengecekan larik (array), pendeteksian terhadap percobaan terhadap penggunaan Variabel-variabel yang belum diinisialisasikan, portabilitas kode sumber, dan pengumpulan sampah (garbage collection) secara otomatis.
Sejarah
Pada akhir dekade 1990-an,
Microsoft membuat program Microsoft Visual J++ sebagai sebuah langkah percobaan untuk menggunakan
Java di dalam sistem operasi Windows untuk meningkatkan antarmuka dari Microsoft Component Object Model (COM). Akan tetapi, akibat masalah dengan pemegang
hak cipta bahasa pemrograman
Java,
Sun Microsystems, Microsoft pun menghentikan pengembangan J++, dan beralih untuk membuat pengganti J++, kompilernya dan
mesin virtualnya sendiri dengan menggunakan sebuah
bahasa pemrograman yang bersifat
general-purpose. Untuk menangani proyek ini, Microsoft merekrut Anders Helsberg, yang merupakan mantan karyawan
Borland yang membuat bahasa
Turbo Pascal, dan
Borland Delphi, yang juga mendesain Windows Foundation Classes (WFC) yang digunakan di dalam J++. Sebagai hasil dari usaha tersebut, C# pun pertama kali diperkenalkan pada bulan Juli 2000 sebagai sebuah bahasa pemrograman modern berorientasi objek yang menjadi sebuah bahasa pemrograman utama di dalam pengembangan di dalam
platform Microsoft .NET Framework.
Pengalaman Helsberg sebelumnya dalam pendesain bahasa pemrograman seperti Visual J++,
Delphi,
Turbo Pascal) dengan mudah dilihat dalam
sintaksis bahasa C#, begitu pula halnya pada inti
Common Language Runtime (CLR). Dari kutipan atas
interview dan makalah-makalah teknisnya ia menyebutkan kelemahan-kelemahan yang terdapat pada bahasa pemrograman yang umum digunakan saat ini, misalnya
C++,
Java,
Delphi, ataupun
Smalltalk. Kelemahan-kelemahan yang dikemukakannya itu yang menjadi basis CLR sebagai bentukan baru yang menutupi kelemahan-kelemahan tersebut, dan pada akhirnya memengaruhi desain pada bahasa C# itu sendiri. Ada kritik yang menyatakan C# sebagai bahasa yang berbagi akar dari bahasa-bahasa pemrograman lain.
[1] Fitur-fitur yang diambilnya dari bahasa C++ dan Java adalah desain berorientasi objek, seperti
garbage collection,
reflection, akar kelas (
root class), dan juga penyederhanaan terhadap pewarisan jamak (
multiple inheritance). Fitur-fitur tersebut di dalam C# kini telah diaplikasikan terhadap
iterasi,
properti, kejadian (
event),
metadata, dan konversi antara tipe-tipe sederhana dan juga objek.
C# didisain untuk memenuhi kebutuhan akan sintaksis C++ yang lebih ringkas dan
Rapid Application Development yang 'tanpa batas' (dibandingkan dengan RAD yang 'terbatas' seperti yang terdapat pada
Delphi dan
Visual Basic).
Agar mampu mempromosikan penggunaan besar-besaran dari bahasa C#, Microsoft, dengan dukungan dari
Intel Corporation dan
Hewlett-Packard, mencoba mengajukan standardisasi terhadap bahasa C#. Akhirnya, pada bulan
Desember 2001, standar pertama pun diterima oleh European Computer Manufacturers Association atau
Ecma International (ECMA), dengan nomor standar
ECMA-334. Pada Desember
2002, standar kedua pun diadopsi oleh ECMA, dan tiga bulan kemudian diterima oleh
International Organization for Standardization (ISO), dengan nomor standar
ISO/IEC 23270:2006
Fitur-fitur bahasa
C# kadang-kadang dapat disebutkan sebagai bahasa pemrograman yang paling mencerminkan dasar dari CLR dimana semua program-program .NET berjalan, dan bahasa ini sangat bergantung pada kerangka tersebut sebab ia secara spesifik didisain untuk mengambil manfaat dari fitur-fitur yang tersedia pada CLR.