C#, Microsoft tarafından .NET platformu için geliştirilmiş; tip güvenli (type-safe), modern ve nesne yönelimli (OOP) bir programlama dilidir. Anders Hejlsberg liderliğindeki bir ekip tarafından tasarlanmış ve C/C++ ile Java sözdizimi ailesine dayandırılmıştır.
- Tip Güvenliği (Type-Safe): Değişken türleri katı kurallarla denetlenir; bellek taşmaları ve uyumsuz tür atamaları derleme aşamasında engellenir.
- Platform Bağımsızlığı: Modern .NET (.NET Core ve sonrası) sayesinde yazılan kodlar Windows, Linux ve macOS üzerinde çalıştırılabilir.
- Otomatik Bellek Yönetimi (Garbage Collection): Kullanılmayan nesneler CLR (Common Language Runtime) bünyesindeki Çöp Toplayıcı tarafından otomatik olarak bellekten temizlenir.
Çalışma Mimarisi (Execution Model)
C# kodu doğrudan makine koduna derlenmez; iki aşamalı bir derleme sürecinden geçer:
- Derleme (Compilation): C# kaynak kodu (
.cs), derleyici (Roslyn) tarafından IL / CIL (Common Intermediate Language) adı verilen ara dile çevrilir. - Çalışma Zamanı (Runtime): IL kodu, .NET’in çalışma ortamı olan CLR (Common Language Runtime) tarafından okunur.
- JIT Derleyici (Just-In-Time): CLR içindeki JIT derleyici, IL kodunu çalıştırıldığı işletim sisteminin ve işlemcinin anlayacağı öz yerel makine koduna (Native Machine Code) dönüştürür.
Tip Sistemi (Type System)
C# dilinde tüm tipler hiyerarşik olarak System.Object kök sınıfından türemiştir. Bellek yönetimine göre iki ana kategoriye ayrılır:
| Özellik | Değer Tipleri (Value Types) | Referans Tipleri (Reference Types) |
| Örnekler | int, float, double, bool, char, struct, enum | class, interface, string, array, delegate |
| Bellek Bölgesi | Değerin kendisi Stack üzerinde tutulur. | Veri Heap üzerinde, adresi (işaretçisi) Stack üzerinde tutulur. |
| Kopyalama Davranışı | Değer kopyalanır; biri değiştiğinde diğeri etkilenmez. | Referans adresi kopyalanır; iki değişken aynı veriyi işaret eder. |
| Varsayılan Değer | Sayısal tipler için 0, bool için false. | null (tanımsız). |
Nesne Yönelimli Programlamanın (OOP) Dört Temel İlkesi
- Kapsülleme (Encapsulation): Verilerin ve metotların tek bir birim (sınıf) içinde paketlenmesi ve iç durumun dışarıdan doğrudan erişime kapatılmasıdır.
private,protected,publicerişim belirteçleri vePropertyyapıları kullanılır. - Kalıtım (Inheritance): Bir sınıfın (derived class), başka bir sınıfın (base class) özelliklerini ve davranışlarını devralmasıdır. Kod tekrarını önler (Örn:
class Kopek : Hayvan). - Çok Biçimlilik (Polymorphism): Aynı isimdeki metotların farklı sınıflarda farklı şekillerde davranabilmesidir. Temel sınıfta
virtualtanımlanan metotlar, alt sınıftaoverrideedilerek özelleştirilir. - Soyutlama (Abstraction): Karmaşık sistem detaylarının gizlenip yalnızca gerekli olan arayüzün kullanıcıya sunulmasıdır.
abstract classveinterfaceyapıları üzerinden gerçekleştirilir.
C#’ın Ayırt Edici Modern Özellikleri
- LINQ (Language Integrated Query): Koleksiyonlar, veri tabanları veya XML verileri üzerinde SQL benzeri sorgulama yapmayı sağlayan yerleşik sözdizimidir.
- Async / Await (Asenkron Programlama): Uzun süren I/O veya ağ işlemlerinde ana iş parçacığını (UI thread) kilitlemeden eşzamanlı işlem yürütmeyi sağlar (
TaskveTask<T>). - Null Güvenliği (Nullable Reference Types):
nullkaynaklı çalışma zamanı hatalarını (NullReferenceException) derleme aşamasında en aza indiren statik analiz desteği.
