C# ("si şarp" diye okunur), Microsoft'ta Anders Hejlsberg liderliğindeki bir ekibin tasarladığı ve ilk kez 2002'de yayımlanan genel amaçlı bir programlama dilidir. Statik tiplidir (her değişkenin, program çalışmadan önce derleyicinin denetlediği bir tipi vardır), nesne yönelimlidir (kod sınıflar halinde düzenlenir) ve yönetilen bir dildir (belleği sizin yerinize bir çöp toplayıcı serbest bırakır). Modern C# fonksiyonel programlamadan da çok şey alır: lambda'lar, LINQ sorguları, pattern matching ve değiştirilemez record'lar.
İşte eksiksiz bir C# programı. Run'a basın:
Çıktı:
Hello, Ada! It is 2026.
C# ne için kullanılır
C# genel amaçlı bir dil olduğu için çoğu yazılım türünde karşınıza çıkar, ama kullanımın büyük kısmı birkaç alanda toplanır:
- Oyunlar. En yaygın oyun motorlarından biri olan Unity'de betikler C# ile yazılır. Godot da C#'ı destekler.
- Web backend'leri. ASP.NET Core; API'ler, web siteleri ve gerçek zamanlı uygulamalar için .NET web framework'üdür. Herkese açık benchmark'larda en hızlı yaygın web framework'leri arasındadır.
- Masaüstü uygulamaları. Windows'ta WPF ve Windows Forms, platformlar arası .NET MAUI ve Avalonia.
- Bulut ve servisler. Azure Functions, arka plan işçileri, container içindeki mikroservisler.
- Araçlar ve otomasyon. Komut satırı araçları, build betikleri, veri işleme.
Özellikle Microsoft teknolojisiyle çalışan kurumsal şirketlerde ve oyun stüdyolarında yaygındır. .NET MAUI (Xamarin'in halefi) ile mobil uygulama da yazılabilir, ama bu Kotlin ya da Swift'e göre daha küçük bir alandır.
C# ve .NET aynı şey değildir
C# dildir. .NET ise onu çalıştıran platformdur ve üç parçası vardır:
- Çalışma zamanı (CLR). C# derleyicisi makine kodu üretmez.
.dllya da.exedosyalarında saklanan Ara Dil (IL) üretir. Program çalıştığında Common Language Runtime bu IL'i anında (JIT) yerel koda derler, belleği bir çöp toplayıcıyla yönetir ve tip güvenliğini sağlar. - Temel sınıf kütüphanesi. Koleksiyonlar, dosya erişimi, ağ, metin, tarihler, thread'ler:
System.*altındaki her şey. - SDK. Projeleri oluşturan, derleyen, test eden ve çalıştıran
dotnetkomutu.
Başka diller de aynı IL'e derlenir (F#, Visual Basic); bu yüzden bir C# programı F# ile yazılmış bir kütüphaneyi kullanabilir.
Platformun iki kuşağı vardır. .NET Framework (2002'deki 1.0'dan 4.8.1'e kadar) yalnızca Windows'ta çalışır ve hâlâ birçok eski uygulamayı çalıştırır. .NET (5. sürüme kadar adı .NET Core'du) ise Windows, Linux ve macOS'ta çalışan açık kaynaklı, çok platformlu haleftir. Yeni işler .NET'i hedefler; .NET 8 ve .NET 10 gibi çift numaralı sürümler üç yıl uzun süreli destek alır.
Bir C# programının yapısı
Bir C# programı, üyeler (alanlar, property'ler, metotlar) içeren tiplerden (class, struct, interface, enum, record) oluşur. Çalışma, Main adlı statik bir metotta başlar. Namespace'ler ilişkili tipleri gruplar ve using yönergeleri onlara kısa adlarıyla başvurmanızı sağlar.
Çıktı:
Maya: 21.00
Leo: 13.00
Şimdiden birkaç şey görülüyor: Order, iki property (Customer, Total), bir constructor ve bir metot içeren bir sınıftır. decimal para için kullanılan tiptir ve m son eki bir decimal literal'ini işaretler. var, derleyicinin yerel bir değişkenin tipini çıkarmasını sağlar; List<Order> ise yalnızca Order nesnelerini kabul eden generic bir koleksiyondur. $"..." içindeki {order.Total:F2} bir sayıyı iki ondalık basamakla biçimlendirir.
Gerçek bir projede her sınıf genellikle kendi dosyasında durur ve dosyalar birlikte tek bir assembly'ye derlenir. Ayrıntılar için sınıflar ve nesneler sayfasına bakın.
Uygulamada statik tipleme
Derleyici her ifadenin tipini bilir, bu yüzden büyük bir hata sınıfı çalışan programa hiç ulaşmaz. Bir int'e string atamak, var olmayan bir metodu çağırmak ya da argümanları yanlış sırayla vermek, derleme sırasında ilgili satırı gösteren bir hatayla başarısız olur.
Çıktı:
29.97
45
Tipler editörü de yönlendirir: C#'ta otomatik tamamlama, yeniden adlandırma ve "tüm referansları bul" kesindir, çünkü araçlar derleyicinin okuduğu tip bilgisinin aynısını okur.
C# sürümleri ve getirdikleri
2020'deki C# 9'dan beri her kasım ayında yeni bir .NET sürümüyle birlikte yeni bir C# sürümü çıkar; öncesinde sürümler iki üç yılda bir gelirdi. Her sürüm mevcut kodun derlenmeye devam etmesi için tasarlanır ve nadir istisnalar (C# 14'te property erişimcilerinin içinde field'ın anahtar kelime olması gibi) kırıcı değişiklik olarak belgelenir; bu yüzden C# 2 için yazılmış bir program bugün neredeyse her zaman değişmeden derlenir.
| Sürüm | Yıl | Öne çıkan eklemeler |
|---|---|---|
| C# 2 | 2005 | Generics, nullable değer tipleri (int?), iterator'lar (yield) |
| C# 3 | 2007 | LINQ, lambda ifadeleri, var, nesne başlatıcılar, extension metotlar |
| C# 4 | 2010 | dynamic, isteğe bağlı ve adlandırılmış parametreler |
| C# 5 | 2012 | async ve await |
| C# 6 | 2015 | String interpolation $"...", nameof, null koşullu ?. |
| C# 7 | 2017 | Tuple'lar, out var, is ile pattern matching, basamak ayırıcılar |
| C# 8 | 2019 | Nullable referans tipleri, switch ifadeleri, aralıklar s[1..4], ??=, async stream'ler |
| C# 9 | 2020 | Record'lar, init erişimcileri, top-level statements, hedef tipli new() |
| C# 10 | 2021 | Global using'ler, dosya kapsamlı namespace'ler, record struct'lar |
| C# 11 | 2022 | Ham string literal'leri """, required üyeler, liste desenleri |
| C# 12 | 2023 | Sınıflar için birincil constructor'lar, koleksiyon ifadeleri [1, 2, 3] |
| C# 13 | 2024 | params koleksiyonları, System.Threading.Lock tipi |
| C# 14 | 2025 | Extension üyeleri, property'lerde field anahtar kelimesi |
Yeni sürümler çoğunlukla gereksiz kalıpları kaldırır. Bu C# 9 ve sonrası programı top-level statements (ne class Program ne Main), bir record ve bir switch ifadesi kullanır:
// C# 9 and later, in a .NET 6+ project (implicit usings import System)
var order = new Order("Maya", 21.00m);
Console.WriteLine(Shipping(order));
static string Shipping(Order o) => o.Total switch
{
>= 50m => "free shipping",
>= 20m => "standard shipping",
_ => "shipping fee applies"
};
record Order(string Customer, decimal Total);
Aynı mantık, C# 6 ve sonraki her sürümde derlenen eski açık stilde:
Çıktı:
standard shipping
İki biçim de geçerli C#'tır. Eski, açık stili mevcut kodda, eğitimlerde ve Unity projelerinde; kısa stili ise yeni .NET projelerinde görürsünüz.
LINQ: dilin içinde veri sorgulamak
LINQ (Language Integrated Query, C# 3), insanların C#'ı neden sevdiklerini anlatırken andığı özelliklerden biridir. Bir metot zinciriyle herhangi bir koleksiyonu filtrelemenizi, sıralamanızı, gruplamanızı ve dönüştürmenizi sağlar:
Çıktı:
95, 91, 88, 72
Average: 78.0
Best: 95
Aynı sözdizimi bellekteki listelerde, Entity Framework aracılığıyla veritabanı tablolarında ve XML'de çalışır. Daha fazlası LINQ sayfasında.
C# iyi bir ilk dil mi?
C# başta Python'dan daha fazlasını ister: tipleri bildirirsiniz, ifadeleri noktalı virgülle bitirirsiniz ve kodu sınıfların içine koyarsınız. Karşılığında derleyici hataları erken yakalar, araçlar (Visual Studio, VS Code, Rider) mükemmeldir ve kavramlar doğrudan Java, TypeScript, Kotlin ve C++'a aktarılır. Unity oyunları yapmak ya da bir .NET şirketinde çalışmak istiyorsanız açık seçimdir. Hedefiniz veri analizi ya da makine öğrenmesiyse Python'un ekosistemi daha büyüktür.
Başlamak için .NET SDK'yı kurup dotnet new console çalıştırın ya da Hello World ile başlayıp bu sayfalardaki örnekleri doğrudan çalıştırın.
Sıkça Sorulan Sorular
C# nedir?
C# ("si şarp" diye okunur), Microsoft'ta geliştirilen ve ilk kez 2002'de yayımlanan statik tipli, nesne yönelimli, genel amaçlı bir programlama dilidir. Kaynak kodu, .NET çalışma zamanının makine koduna çevirdiği bir ara dile derlenir ve bellek çöp toplayıcı tarafından yönetilir. Web backend'lerinde, Unity oyunlarında, masaüstü uygulamalarında, bulut servislerinde ve araçlarda kullanılır.
C# ile .NET aynı şey mi?
Hayır. C# dildir; .NET ise üzerinde çalıştığı platformdur: çalışma zamanı (CLR), temel sınıf kütüphanesi (System.Collections.Generic, System.IO vb.) ve SDK araçları. F# ve Visual Basic de .NET üzerinde çalışır ve bir C# sürümü genellikle bir .NET sürümüyle birlikte çıkar (örneğin C# 12, .NET 8 ile).
C# ne için kullanılır?
ASP.NET Core ile web API'leri ve siteler, Unity ile oyunlar (Unity'nin betik dili C#'tır), WPF ve WinForms ile Windows masaüstü uygulamaları, .NET MAUI ile çok platformlu uygulamalar, bulut servisleri ve Azure Functions, komut satırı araçları. Kurumsal yazılımlarda ve oyun stüdyolarında yaygındır.
C# öğrenmek zor mu?
İlk dil olarak orta zorluktadır. Sözdizimi C tarzıdır ve Python'dan daha katıdır, çünkü her değişkenin derleyicinin denetlediği bir tipi vardır; ama bellek sizin için yönetilir ve hata mesajları anlaşılırdır. Çoğu yeni başlayan, birkaç haftalık pratikle işe yarar konsol programları yazabilir.
C# öğrenmeye hâlâ değer mi?
Evet. C#, geliştirici anketlerinde sürekli en çok kullanılan diller arasındadır, .NET açık kaynaklı ve çok platformludur ve dil her kasım ayında yeni bir sürüm alır. Unity ile oyun yapmak ya da Microsoft teknolojileri üzerine kurulu şirketlerde çalışmak istiyorsanız pratik seçimdir.