Apa itu C#?
C# dirancang khusus untuk platform .NET Framework milik Microsoft dan pengucapannya adalah “See Sharp”.
Microsoft memerlukan kerangka pengembangan terintegrasi yang seragam dan sepenuhnya berorientasi objek guna memperbaiki kekurangan teknologi lama. Oleh karena itu, perusahaan mulai membangun lingkungan eksekusi kode baru beserta rangkaian alat pengembangan lengkap.
Setelah lebih dari 20 tahun perkembangan, C# berubah dari bahasa pemrograman khusus Windows menjadi bahasa lintas platform yang kompatibel dengan berbagai sistem operasi.
Saat ini, C# bersama .NET membentuk solusi lintas platform lengkap, dapat digunakan untuk membuat aplikasi Windows, macOS, Linux, dan Android. Selain itu, ini merupakan lingkungan eksekusi pilihan untuk sebagian besar sistem cloud.
Berkat dukungan penuh dari Microsoft, C# mendapatkan pembaruan secara rutin dan cepat. Versi 7 dirilis pada tahun 2022. C# tetap kompatibel dengan kode yang dibuat 20 tahun lalu, sedangkan versi terbaru menawarkan sintaks yang lebih ringkas, elegan, dan struktur yang lebih padat. Pada tahun 2026, versi terbaru adalah versi 15.
Ringkasan sejarah versi C# (cuplikan)
- C# 1.0 (2001): rilis publik resmi
- C# 2.0 (VS2005): generik, iterator, metode anonim
- C# 3.0 (VS2008): metode ekstensi, ekspresi Lambda, LINQ (kueri terintegrasi bahasa)
- C# 4.0 (2010): parameter bernama/opsional, tipe dinamis dynamic, pustaka tugas paralel TPL guna memanfaatkan penuh prosesor multi-inti
- C# 5.0: dukungan asli untuk tugas asinkron dengan async/await
- C# 6.0: interpolasi string, anggota badan ekspresi, sintaks properti yang disederhanakan
- C# 7.0~7.3: beberapa nilai kembalian melalui tuple, penyederhanaan parameter out, pencocokan pola, metode Main asinkron
- C# 8.0/9.0/10.0: record (tipe referensi tidak dapat diubah), pernyataan tingkat atas (tanpa perlu Main), metode antarmuka bawaan, fungsi lokal statis, tipe dapat dilepaskan asinkron, pencocokan pola di seluruh cakupan bahasa
- C#11 (.NET7): string mentah, matematika generik, properti required
- C#12 (.NET8): konstruktor utama, sintaks singkat koleksi, larik sebaris
- C#13 (.NET9): properti parsial, indekser ekstensi, variabel ref lokal dalam iterator
- C#14 (.NET10): alias generik, pencocokan koleksi mendalam, gula sintaksis SIMD
Windows masih menjadi platform utama C#, namun melalui .NET Runtime, kode dapat dijalankan langsung di sistem seperti Linux. Hal ini memungkinkan kita menulis satu basis kode untuk diterapkan ke beberapa sistem operasi.
Kerangka .NET Framework
.NET Framework pertama kali diluncurkan pada tahun 2002.
.NET Framework mengatasi batasan generasi alat pengembangan lama, dan keunggulan utamanya adalah sebagai berikut:
- Dukungan multi-perangkat: berjalan di server, komputer, PDA, ponsel, dan perangkat keras lainnya;
- Sesuai standar industri: dukungan asli protokol komunikasi universal XML, HTTP, SOAP, JSON, WSDL;
- Kotak pasir keamanan: memberikan isolasi aman untuk menjalankan kode dari sumber yang tidak terpercaya.
Tiga komponen inti .NET Framework
- CLR Common Language Runtime (lingkungan eksekusi) mengelola seluruh siklus hidup program: manajemen memori dan pengumpul sampah, validasi keamanan kode, penjadwalan utas, penanganan pengecualian.
- Kumpulan alat pengembangan lingkungan pengembangan terintegrasi, kompiler .NET multibahasa (C#/VB.NET/F# dan lainnya), debugger serta teknologi backend web seperti ASP.NET/WCF.
- BCL Pustaka Kelas Dasar (juga disebut FCL Framework Class Library) berisi banyak sekali kelas generik yang sudah dibuat, dapat dipanggil langsung oleh pengembang.
Peningkatan .NET dibanding pengembangan Windows tradisional
Sistem berorientasi objek terpadu
CLR, BCL, dan C# terintegrasi erat dan menyediakan model OOP seragam. Aplikasi desktop, seluler, web, dan terdistribusi menggunakan paradigma pengembangan yang sama, sintaks dan logika konsisten di semua perangkat.
Pengumpul sampah otomatis GC
CLR memiliki pengumpul sampah bawaan yang secara otomatis melepaskan memori objek yang tidak digunakan lagi. Pengembang tidak perlu melepaskan memori secara manual atau melacak kebocoran memori, sehingga beban perawatan berkurang drastis.
Interoperabilitas multidimensi
- Pertukaran antar bahasa .NET: kelas yang ditulis dalam bahasa .NET berbeda dapat saling memanggil dan mewarisi satu sama lain; platform tidak terikat pada satu bahasa pemrograman saja;
- Pemanggilan platform P/Invoke: dapat memanggil langsung antarmuka DLL asli Win32 berbahasa C;
- Kompatibilitas COM: komponen .NET dan komponen COM lama dapat saling dipanggil dua arah.
Penyebaran disederhanakan: tidak bergantung pada registri sistem; dalam skenario minimal cukup salin berkas untuk menjalankan program;
Rakitan paralel: beberapa versi DLL yang sama dapat hidup berdampingan di satu perangkat. Setiap program terhubung dengan versi pustaka saat dikompilasi, sehingga konflik versi DLL teratasi.
Validasi keamanan tipe CLR (Common Language Runtime) wajib memvalidasi parameter dan tipe data. Bahkan saat komponen dari bahasa berbeda saling berinteraksi, keamanan tipe tetap terjaga dan akses memori ilegal diblokir.
Pustaka Kelas Dasar BCL yang Lengkap
Banyak kelas utilitas generik sudah tersedia secara bawaan
- Alat dasar untuk berkas, string, enkripsi, dan keamanan;
- Kontainer koleksi: daftar, kamus, tabel hash;
- Alat multiutas, sinkronisasi, dan konkurensi;
- Kelas baca tulis dokumen XML
- dan banyak fitur lainnya
Semua logika tingkat rendah umum sudah dibuat sebelumnya, sehingga pengembang hanya perlu menulis logika khusus bisnis. Gunakan kembali alat yang matang agar tidak mengulangi pembuatan fitur yang sama.

Diagram alir program .NET: kode yang kamu tulis dikompilasi menjadi kode perantara IL. IL dapat memanggil pustaka dari BCL dan akhirnya dikirim ke CLR untuk dijalankan.
Hubungan antara C# dan .NET
.NET Framework: platform lengkap untuk pengembangan dan eksekusi yang terdiri dari dua komponen utama
- CLR (Common Language Runtime): bertanggung jawab manajemen memori kode, eksekusi, dan validasi keamanan
- BCL (Pustaka Kelas Dasar): kumpulan kode utilitas generik yang luas (berkas, jaringan, antarmuka grafis, konkurensi, dan banyak lagi)
C#: sebuah bahasa pemrograman yang dirancang khusus untuk platform .NET, digunakan untuk menulis kode yang berjalan di atas CLR
Selain C#, ada bahasa pemrograman lain yang mendukung .NET, seperti F# dan VB.NET.
Tujuan kerangka .NET adalah lintas platform dan lintas bahasa. Lintas platform berarti dapat berjalan di berbagai sistem operasi; lintas bahasa berarti komponen yang dibuat dengan bahasa berbeda dapat saling mengakses.
Kompilasi ke Bahasa Perantara Umum (CIL)
Kompiler setiap bahasa .NET membaca berkas kode sumber dan menghasilkan berkas keluaran bernama rakitan (assembly)
Ada dua jenis rakitan: berkas eksekusi (exe) atau pustaka taut dinamis (DLL)
Kode di dalam rakitan bukan kode mesin asli prosesor, melainkan kode perantara bernama Bahasa Perantara Umum (Common Intermediate Language, CIL).
Satu rakitan utamanya berisi elemen berikut:
- Instruksi kode CIL program
- Metadata semua tipe yang didefinisikan dalam program
- Metadata hubungan rujukan ke rakitan eksternal lainnya
Singkatan bahasa perantara berubah seiring perkembangan .NET, sehingga dokumen berbeda menggunakan nama berbeda. Baik Bahasa Perantara (IL) maupun Bahasa Perantara Microsoft (MSIL) merujuk pada CIL.

Kompilasi ke kode asli dan eksekusi
CIL tidak dikonversi ke kode mesin asli sebelumnya; hanya saat program dijalankan CLR menjalankan tiga langkah berikut:
- Validasi informasi keamanan rakitan
- Alokasi memori eksekusi
- Kirim ke kompiler JIT untuk dikompilasi per bagian menjadi kode asli
Mekanisme kompilasi sesuai permintaan JIT
Hanya kode yang akan dieksekusi dikompilasi, lalu disimpan di cache untuk digunakan kembali. Kode yang tidak pernah dipanggil tidak dikompilasi, fragmen kode yang sama hanya dikonversi satu kali saja.
Rakitan (CIL + informasi tipe) → CLR (kompiler JIT) → Kode asli → Layanan sistem operasi
Tugas pengelolaan CLR
Setelah CIL dikonversi ke kode asli, CLR mengelola secara otomatis: pemulihan memori tidak terpakai, pemeriksaan batas larik, validasi tipe parameter, dan penanganan pengecualian.
Kode terkelola dan kode tidak terkelola
- Kode terkelola: kode yang ditulis dengan bahasa .NET, eksekusinya dikendalikan oleh CLR
- Kode tidak terkelola: tidak berada di bawah kendali CLR, contohnya DLL asli Win32 buatan C/C++
Saat ini Microsoft menyediakan kompilasi AOT: kamu bisa langsung mengkompilasi kode C# menjadi kode asli mirip C++. Berkas EXE dapat dijalankan tanpa memasang runtime .NET terlebih dahulu.
Alat NGen
Melakukan pra-kompilasi rakitan secara luring menjadi gambar asli. Saat eksekusi langkah JIT dilewati, sehingga mempercepat waktu mulai aplikasi.
.NET Core AOT adalah generasi baru pra-kompilasi, dapat menghasilkan berkas eksekusi asli mandiri tanpa ketergantungan runtime.
Rakitan (Informasi tipe, CIL)
↓
Kompiler JIT
↓
Kode asli
↓
Layanan Sistem Operasi
Apapun bahasa asal kode sumbernya, semua mengikuti alur kompilasi dan eksekusi yang sama.
Setiap bahasa memiliki kompiler sendiri: VB.NET punya kompiler khusus VB, C# punya kompiler C#. Semua mengubah kodenya menjadi CIL, CIL melewati JIT menghasilkan kode asli lalu dieksekusi prosesor. Itulah alasan perangkat lunak buatan .NET perlu dipasang lingkungan .NET, sama seperti Java yang butuh JRE.
flowchart TD
subgraph Compile_Time
A[C# Source] --> B[C# Compiler]
B --> C[Assembly CIL]
D[VB Source] --> E[VB Compiler]
E --> C
F[Xyz.NET Source] --> G[Xyz.NET Compiler]
G --> C
end
subgraph Run_Time
C --> H[JIT Compiler]
H --> I[Native Code]
I --> J[Operating System Services]
end
Diagram di atas menunjukkan alur lengkap kompilasi hingga eksekusi untuk semua bahasa.
Common Language Runtime (CLR)
Komponen inti .NET Framework adalah CLR, terletak di atas sistem operasi dan mengelola seluruh eksekusi program.
- Pengumpul sampah otomatis (GC)
- Validasi keamanan dan autentikasi melalui Pustaka Kelas Dasar (BCL)
- Menyediakan kemampuan pemrograman luas termasuk layanan web, layanan data, dan fitur lainnya
flowchart TD
subgraph Unmanaged_Code
A[Non-.NET Program] --> OS[Operating System]
end
subgraph Managed_Code
B[Assembly] --> CLR[Common Language Runtime]
C[Assembly] --> CLR
D[Assembly] --> CLR
subgraph CLR[Common Language Runtime]
M[Memory Management] --- E[Exception Handling]
G[Garbage Collection] --- R[Reflection Services]
J[JIT Compiler] --- L[Class Loader]
S[Security Services]
end
CLR --> OS
end
Infrastruktur Bahasa Umum (CLI)
Setiap bahasa pemrograman memiliki sekumpulan tipe dasar asli untuk merepresentasikan bilangan bulat, bilangan pecah, karakter, dan data lainnya.
Infrastruktur Bahasa Umum (CLI) adalah kumpulan standar yang menyatukan semua komponen .NET Framework menjadi satu sistem lengkap dan kompatibel.
Contohnya, jumlah bit yang ditempati bilangan bulat sama di semua bahasa yang didukung.
flowchart TD
subgraph CLI[CLI]
CLR[Common Language Runtime] --- CLS[Common Language Specification]
BCL[Base Class Library] --- MDS[Metadata Definition & Semantics]
CTS[Common Type System] --- CIL[Common Intermediate Language]
end
Sebagian besar pengembang tidak perlu mendalami seluruh spesifikasi CLI, namun wajib menguasai Sistem Tipe Umum CTS dan Spesifikasi Bahasa Umum CLS.
CTS Sistem Tipe Umum
- Menyediakan kumpulan tipe data dasar terstandarisasi dengan properti tetap masing-masing;
- Semua tipe khas setiap bahasa .NET dipetakan ke subhimpunan tipe standar ini;
- Semua tipe mewarisi kelas akar
object; - Standar terpadu membuat tipe asli sistem dan tipe buatan pengguna dapat saling digunakan antar bahasa .NET manapun.
CLS Spesifikasi Bahasa Umum
Mendefinisikan aturan seragam yang harus diikuti semua bahasa kompatibel .NET, mencakup batasan interaksi antar bahasa: tipe data, konstruktor kelas, pengiriman parameter, dan lainnya.
Perbedaan antara .NET dan .NET Framework
.NET adalah platform lintas platform modern milik Microsoft, sedangkan .NET Framework adalah runtime dan pustaka lama yang hanya terbatas untuk Windows. Semua fitur baru dikembangkan hanya di .NET; .NET Framework masuk tahap pemeliharaan dan hanya menerima pembaruan keamanan.
.NET bersifat lintas platform dan menjadi fokus utama pengembangan Microsoft. Selanjutnya seluruh konten materi akan berfokus pada .NET.
| Ciri | .NET | .NET Framework |
|---|---|---|
| Dukungan Platform | Lintas platform (Windows, Linux, macOS, kontainer, seluler via MAUI) | Hanya Windows |
| Status | Pembaruan berkelanjutan (.NET 5 hingga .NET 10, rilis tahunan dengan dukungan LTS jangka panjang) | Mode pemeliharaan (4.8 versi terakhir, hanya tambalan keamanan) |
| Performa | Mulai lebih cepat, throughput tinggi, pengumpul sampah dioptimalkan | Performa lawas, bergantung pada API Windows |
| Skenario Penggunaan | Proyek baru: API web, mikrolayanan, cloud native, desktop/seluler lintas platform | Proyek lama: Web Forms, WCF, Windows Workflow, dan lainnya |
| Penyebaran | Dukungan penuh Docker, kontainer, dan lingkungan cloud | Tidak dukung kontainer, bergantung pada Windows Server |
| Bahasa Didukung | C#, F#, VB.NET (lintas platform) | C#, VB.NET (khusus Windows) |
Perbedaan antara .NET dan .NET Framework tidaklah besar. Keduanya menggunakan bahasa seperti C#, F# dan VB.NET serta sintaks inti yang sama. Sebagian besar kode C# yang kamu tulis dapat dikompilasi dan dijalankan baik di .NET Framework maupun .NET (Core/5/6/7/8…).
Perbedaan utamanya terletak pada ketersediaan pustaka kelas, bukan sintaks.
Teknologi yang ada di .NET Framework seperti WCF, Web Forms, Windows Workflow sudah dihapus atau diganti alternatif di .NET modern.
.NET modern menambahkan API baru seperti Span<T>, ValueTask, Records yang tidak ada di .NET Framework lama.
Karena .NET Framework khusus Windows sedangkan .NET lintas platform, beberapa pustaka eksklusif Windows dihapus dari .NET. Contohnya System.Drawing berjalan di Windows, tapi di .NET lintas platform ditandai hanya kompatibel Windows. Jika kamu butuh pustaka gambar di .NET tidak boleh pakai System.Drawing, gunakan pustaka pihak ketiga seperti SkiaSharp milik Google.
Catatan: perbedaan di atas berada di tingkat kerangka, sedangkan di tingkat bahasa seperti C# hampir tidak ada perbedaan. Sintaks C# sama persis di kedua lingkungan. Perbedaan sesungguhnya ada pada pustaka kelas dan lingkungan eksekusi, yaitu kumpulan API yang tersedia berbeda.