Başlık: Başlangıç

    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:

    1. Derleme (Compilation): C# kaynak kodu (.cs), derleyici (Roslyn) tarafından IL / CIL (Common Intermediate Language) adı verilen ara dile çevrilir.
    2. Çalışma Zamanı (Runtime): IL kodu, .NET’in çalışma ortamı olan CLR (Common Language Runtime) tarafından okunur.
    3. 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:

    ÖzellikDeğer Tipleri (Value Types)Referans Tipleri (Reference Types)
    Örneklerint, float, double, bool, char, struct, enumclass, interface, string, array, delegate
    Bellek BölgesiDeğ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ğerSayısal tipler için 0, bool için false.null (tanımsız).

    Nesne Yönelimli Programlamanın (OOP) Dört Temel İlkesi

    1. 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, public erişim belirteçleri ve Property yapıları kullanılır.
    2. 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).
    3. Çok Biçimlilik (Polymorphism): Aynı isimdeki metotların farklı sınıflarda farklı şekillerde davranabilmesidir. Temel sınıfta virtual tanımlanan metotlar, alt sınıfta override edilerek özelleştirilir.
    4. Soyutlama (Abstraction): Karmaşık sistem detaylarının gizlenip yalnızca gerekli olan arayüzün kullanıcıya sunulmasıdır. abstract class ve interface yapı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 (Task ve Task<T>).
    • Null Güvenliği (Nullable Reference Types): null kaynaklı çalışma zamanı hatalarını (NullReferenceException) derleme aşamasında en aza indiren statik analiz desteği.