C# için hap gibi kısa kısa bilgiler Part-1 (100 Terminoloji)
- var Kullanımı: var anahtar kelimesi türü derleyicinin otomatik belirlemesine izin verir; fakat okunabilirliği arttırmak için türleri belirgin olmayan durumlarda kullanımı önerilmez.
- string Interpolation: $ kullanılarak string interpolasyonu yapılabilir, yani değişkenler doğrudan string içine eklenebilir. Örneğin: $”Merhaba {isim}, yaşınız {yas}”.
- Null Kontrolü: ?. (null-conditional) operatörüyle null kontrolünü kolaylaştırır. Örneğin, person?.Address?.City yazıldığında, person veya Address null ise hata vermez.
- out Parametresi: out ile bir metottan birden fazla değer döndürebilirsiniz. Örneğin, bool TryParse gibi metotlar out kullanır.
- using Bloğu ve IDisposable Arayüzü: Kaynak yönetimi için using bloğu kullanarak belleğin verimli yönetilmesini sağlayabilirsiniz. Örneğin, FileStream veya SqlConnection nesnelerini using bloğunda kullanmak kaynak sızıntılarını önler.
- LINQ ile Veri İşleme: LINQ, koleksiyonları sorgulamak, sıralamak veya gruplamak gibi işlemler için kullanılır ve SQL benzeri bir sözdizimine sahiptir.
- Extension Methods: Genişletme metotlarıyla var olan sınıflara yeni işlevler ekleyebilirsiniz. Bir public static sınıf tanımlayıp this anahtar kelimesini kullanarak genişletme metodunu belirtirsiniz.
- Tuple ile Çoklu Değer Döndürme: Metotlardan birden fazla değer döndürebilmek için Tuple veya C# 7.0 sonrası gelen ValueTuple kullanılabilir.
- Asenkron Programlama (async ve await): Uygulamanızın kilitlenmemesi için uzun sürecek işlemleri asenkron hale getirebilirsiniz. async anahtar kelimesi ile metot asenkron hale gelir, await ile işlemi bekleyebilirsiniz.
- record Türü: C# 9.0 ile gelen record, immutable (değişmez) nesne yapıları için idealdir. Değer bazlı eşitlik kontrolü ve otomatik olarak tanımlı with anahtar kelimesini destekler.
- Diziler (Arrays): C#’da diziler sabit boyutludur ve Array sınıfından türetilir. int[] numbers = new int[5]; şeklinde tanımlanabilir.
- List: List<T> sınıfı koleksiyon yönetiminde oldukça kullanışlıdır. Dinamik olarak boyutlanabilir. List<string> names = new List<string>(); olarak tanımlanabilir.
- Dictionary: Anahtar-değer eşleşmeleri için Dictionary<TKey, TValue> kullanılır. Örneğin, Dictionary<int, string> employees = new Dictionary<int, string>();.
- Queue ve Stack: FIFO (First-In-First-Out) mantığıyla çalışan Queue ve LIFO (Last-In-First-Out) mantığıyla çalışan Stack koleksiyonları sıralı veri işlemleri için kullanılır.
- HashSet: Tekil değerlerden oluşan ve sıralama içermeyen koleksiyonlardır. Veri tekrarı istemediğiniz durumlarda HashSet kullanılabilir.
- ObservableCollection: WPF veya MVVM yapılarında kullanılan, değişiklikleri gözlemleyip arayüze bildiren koleksiyon yapısıdır.
- Yield Kullanımı: yield return ile koleksiyonları tek tek döndürebilir, bellekte büyük koleksiyonlar tutmadan işlem yapabilirsiniz.
- LinkedList: Çift yönlü bağlantılı listeler için LinkedList<T> kullanılır. Hızlı ekleme ve çıkarma işlemleri yapmanıza olanak tanır.
- Concurrent Koleksiyonlar: Eşzamanlı işlemler için ConcurrentBag, ConcurrentQueue, ConcurrentDictionary gibi koleksiyonlar bulunur.
- Immutable Koleksiyonlar: System.Collections.Immutable namespace’inde bulunan immutable koleksiyonlarla değişmez veri yapıları oluşturabilirsiniz.
- Inheritance (Kalıtım): Bir sınıf başka bir sınıftan miras alarak işlevlerini devralabilir. Örneğin, public class Car : Vehicle { … }.
- Polymorphism (Çok Biçimlilik): Taban sınıf referansı ile türetilmiş sınıfın metotlarına ulaşılmasını sağlar.
- Abstract Sınıflar ve Metotlar: abstract sınıflar ve metotlar, yalnızca türetilmiş sınıflar tarafından uygulanır ve soyut davranış tanımlamaları için kullanılır.
- Sealed Anahtar Kelimesi: sealed anahtar kelimesi, bir sınıfın veya metodun devralınmasını veya ezilmesini engeller.
- Interface: interface tanımı ile yalnızca bir sınıfın ne yapması gerektiğini belirten kontratlar oluşturabilirsiniz.
- Static Sınıflar ve Metotlar: static sınıflar yalnızca tek bir kopya ile çalışır ve örneklenemezler. Yardımcı işlevler için kullanılır.
- Properties (Özellikler): C#’da özellikler ile sınıf içinde özel alanlara kontrollü erişim sağlanır. Örneğin, public int Age { get; set; }.
- Encapsulation (Kapsülleme): Kapsülleme, veri gizliliği sağlamak amacıyla sınıfın özel alanlarına doğrudan erişimi kısıtlar.
- Constructor ve Destructor: Yapıcı (constructor) sınıfın başlatma işlevlerini belirler, yıkıcı (destructor) ise sınıf örneği yok edildiğinde çağrılır.
- Partial Sınıflar: partial anahtar kelimesi ile bir sınıfı birden fazla dosyada bölebilirsiniz. Özellikle büyük sınıflarda düzeni sağlamak için kullanılır.
- try-catch: Hata yönetimi için try-catch blokları kullanılır, örneğin, try { … } catch (Exception ex) { … }.
- finally: try-catch blokları içinde, finally bloğu her durumda çalışır. Kaynak temizliği için uygundur.
- throw: Hata fırlatmak için throw kullanılır. Özellikle belirli koşullarda hata oluşturmak istendiğinde faydalıdır.
- Exception Özelleştirme: Kendi özel hata sınıflarınızı Exception sınıfından türeterek tanımlayabilirsiniz.
- AggregateException: Asenkron işlemlerden gelen hataları tek bir AggregateException altında toplar.
- when Anahtar Kelimesiyle Filtreli Catch: Hata koşullarını when anahtar kelimesi ile filtreleyebilirsiniz. Örneğin, catch (Exception ex) when (ex is TimeoutException).
- Exception InnerException: InnerException özelliği ile hatanın temel sebebini bulabilirsiniz. Özellikle bir hata başka bir hata sonucu oluştuğunda yararlıdır.
- try-catch-finally ve Performans: Hata yönetimi pahalı bir işlemdir, sık kullanılan kod bloklarına dahil etmekten kaçının.
- Checked ve Unchecked: checked ve unchecked anahtar kelimeleri, aritmetik taşma kontrolü sağlar. checked { int result = int.MaxValue + 1; }.
- Exception.Data Özelliği: Ek hata bilgilerini saklamak için Exception.Data koleksiyonunu kullanabilirsiniz.
- Optional Parameters (Opsiyonel Parametreler): C#’da metot parametrelerine varsayılan değerler atanabilir. Örneğin, void PrintMessage(string message = “Hello”).
- Named Parameters (İsimli Parametreler): Çağrı sırasında parametre isimleri belirtilerek sıralama zorunluluğu kaldırılabilir. PrintMessage(message: “Merhaba”).
- Params Anahtar Kelimesi: params ile bir metota değişken sayıda parametre geçilebilir. Örneğin, void AddNumbers(params int[] numbers).
- Local Functions: Metot içinde metot tanımlanmasına izin verir. Örneğin, void Outer() { void Inner() { … } }.
- Func ve Action Delegates: Func ve Action, anonim fonksiyonlar oluşturmak için kullanılır. Func<int, int, int> add = (x, y) => x + y;
- .Anonymous Methods (Anonim Metotlar): Lambda ifadeleri ile anonim metotlar oluşturulabilir. list.ForEach(item => Console.WriteLine(item));.
- Generic Methods: Genel tipleri parametre olarak alan metotlar tanımlanabilir. void Swap<T>(ref T a, ref T b).
- Lambda Expressions (Lambda İfadeleri): => operatörü ile ifade edilen, kısa metot tanımlarıdır. LINQ ile sıkça kullanılır.
- Expression Trees: Expression<TDelegate> türü, lambda ifadelerini ağaç yapısında incelemek için kullanılır.
- Extension Methods: Bir sınıfa ek işlevler kazandırmak için genişletme metotları oluşturulabilir.
- Delegates (Delegeler): delegate anahtar kelimesiyle, metotları temsil eden işlev pointer’ları oluşturabilirsiniz. Bir delege bir veya birden fazla metodu gösterebilir.
- Multicast Delegates (Çoklu Yayın Delegeler): Delegeler birden fazla metodu gösterebilir, böylece bir delegeye birden fazla metot ekleyip tümünü tek bir çağrıda çalıştırabilirsiniz.
- Action Delegate: Action delegate, geri dönüş değeri olmayan metotları temsil eder. Örneğin, Action<int> display = x => Console.WriteLine(x);.
- Func Delegate: Func delegate, bir veya daha fazla parametre alan ve bir dönüş değeri döndüren metotları temsil eder. Örneğin, Func<int, int, int> add = (x, y) => x + y;.
- Event Tanımlama: event anahtar kelimesi, delege tabanlı olayların tanımlanmasını sağlar. Örneğin, public event Action OnClick;.
- Event Kullanımı: Olayları tetiklemek için ?.Invoke() kullanabilirsiniz. Örneğin, OnClick?.Invoke();.
- EventHandler ve EventArgs: EventHandler ve EventArgs sınıfları olay parametreleri taşımak için kullanılır. EventHandler<MyEventArgs> ile özel parametreler geçilebilir.
- Custom EventArgs: EventArgs sınıfını miras alarak özel olay argümanları oluşturabilirsiniz.
- Subscriber ve Publisher Yapısı: Olaylara abone olma (+=) ve abonelikten çıkma (-=) yoluyla olaylara yanıt verebilirsiniz.
- Event Encapsulation (Kapsülleme): Etkinlikler, doğrudan değil yalnızca sınıf içinden tetiklenmeli. Bu nedenle olayları protected veya private tanımlayarak kapsülleyin.
- Generic (Genel Türler): T gibi genel tipler, sınıflar veya metotlar içinde tür bağımsızlığı sağlar. List<T> bunun bir örneğidir.
- Generic Constraints: where anahtar kelimesiyle belirli tür kısıtlamaları uygulayabilirsiniz. Örneğin, where T : class.
- Generic Sınıflar: Bir sınıf T parametresiyle genel hale getirilebilir. Örneğin, public class Box<T> { public T Content; }.
- Covariance ve Contravariance: in ve out anahtar kelimeleriyle generic türlerde dönüşüm yapabilirsiniz. out türevleri kabul ederken, in temel türleri kabul eder.
- Generic Delegate: Generic olarak tanımlanmış delegeler daha esnek bir yapı sunar. Örneğin, Func<T, TResult>.
- IEnumerable ve IEnumerator: IEnumerable koleksiyonlarda gezinmeyi sağlar, IEnumerator ise öğeleri döndürme işlemini kontrol eder.
- ICollection: ICollection arayüzü, ekleme, silme ve sayma gibi temel koleksiyon işlemleri sağlar.
- IDictionary: Anahtar-değer çiftlerinden oluşan koleksiyonlar için kullanılır. Dictionary<TKey, TValue> bunun temel örneğidir.
- ReadOnlyCollection: ReadOnlyCollection<T> ile veri üzerinde sadece okuma işlemi yapılabilir, dışarıdan ekleme veya çıkarma yapılamaz.
- IComparer ve IComparable: IComparer ve IComparable arayüzleri, nesneler arasında karşılaştırma yaparak sıralama işlemlerinde kullanılır.
- LINQ SelectMany: SelectMany, iç içe listeler üzerinde işlem yapar ve düz bir liste döndürür.
- LINQ GroupBy: GroupBy, belirli bir kritere göre gruplama işlemi yapar. Örneğin, students.GroupBy(s => s.Grade);.
- LINQ Join: Join ile iki koleksiyonu belirli bir alan üzerinden birleştirebilirsiniz.
- LINQ Distinct: Distinct, koleksiyon içindeki tekrarlanan öğeleri kaldırır.
- LINQ Aggregate: Aggregate, koleksiyondaki öğeler üzerinde kümülatif işlem yapar.
- LINQ Any ve All: Any, en az bir öğenin koşulu sağladığını, All ise tüm öğelerin koşulu sağladığını kontrol eder.
- LINQ Take ve Skip: Take ilk X öğeyi, Skip ise belirtilen sayıda öğeyi atlayarak kalanları döndürür.
- LINQ First, FirstOrDefault: First ve FirstOrDefault ile ilk öğeyi veya varsayılan değeri döndürebilirsiniz.
- LINQ ToDictionary: ToDictionary, koleksiyondaki veriyi bir anahtar-değer çifti olarak dönüştürür.
- Queryable ve LINQ to SQL: IQueryable, veritabanı sorgularında kullanılır ve sorguları geç çalıştırarak performansı artırır.
- Dispose ve IDisposable: Bellek yönetiminde IDisposable arayüzü Dispose metodunu içerir ve sınıfın işini bitirdiğinde belleği serbest bırakır.
- Garbage Collection (Çöp Toplayıcı): .NET’in çöp toplayıcısı, kullanılmayan nesneleri otomatik olarak temizler. GC.Collect() ile manuel çağırabilirsiniz (önerilmez).
- Value vs Reference Types (Değer ve Referans Tipleri): Değer türleri struct ile, referans türleri class ile tanımlanır. Değer türleri stack, referans türleri heap belleğinde tutulur.
- Boxing ve Unboxing: Değer türlerini referans türüne (boxing) ve referans türünden değer türüne (unboxing) dönüştürme işlemidir. Performans üzerinde etkisi vardır.
- Struct ve Class Farkı: struct değer türüdür ve hafif veri yapıları için uygundur, class ise referans türüdür.
- Immutable Objects (Değişmez Nesneler): readonly ve init gibi anahtar kelimelerle nesnelerin değiştirilemez olması sağlanabilir.
- Span ve Memory: Span<T> ve Memory<T>, yüksek performanslı bellek yönetimi sağlar. Özellikle büyük veri kümelerinde gereksiz kopyalamaları önler.
- ArrayPool: ArrayPool<T> sık kullanılan dizileri yeniden kullanarak bellekte performans kazanımı sağlar.
- StringBuilder Kullanımı: StringBuilder, çok sayıda string birleştirme işlemi gerektiren durumlarda performansı artırır.
- Lazy Initialization (Tembel Yükleme): Lazy<T>, yalnızca ihtiyaç duyulduğunda nesnenin başlatılmasını sağlar.
- Nullable Reference Types: Nullable özellikleri ile null referans hataları kontrol altına alınabilir. string? ile null değer alabilen referans türler tanımlanır.
- Pattern Matching (Desen Eşleme): is ve switch ifadeleriyle tür kontrolü ve desen eşleme yapılabilir.
- Property Pattern: switch ifadelerinde nesne özelliklerine göre desen eşlemesi yapabilirsiniz. Örneğin, case { Age: > 18 }.
- Recursive Pattern Matching: Özellikle kompleks veri yapılarında iç içe desen eşleme işlemleri yapılabilir.
- Switch Expressions: Klasik switch ifadesine göre daha okunabilir bir yapı sunar ve inline olarak kullanılabilir.
- Interpolated String Handlers: C# 10 ile gelen interpolated string handlers, interpolasyon işlemlerinde performansı artırır.
- Global Using Statements: C# 10 ile global using direktifleriyle tüm dosyalarda geçerli olacak kütüphane referansları tanımlanabilir.
- init Only Properties: init ile yalnızca nesne oluşturulurken ayarlanabilen özellikler tanımlanır.
- Top-Level Statements: C# 9 ile gelen top-level statements, Main metodu gerektirmeden kod yazmanızı sağlar.
- Record Struct: C# 10 ile gelen record struct, değer bazlı eşitlik ve değişmez veri yapıları için idealdir.
Teminolojimizi de dilimin döndüğünce sizlere aktarabilmişimdir umarım. Bir sonraki yazımızda kavramlara daha detaylı olarak örnekler ile sizlere aktarmayı düşünüyorum umarım birilerinin işine yarar.
Bir yanıt yazın