
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. 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.