C# 14 Extension Members: Extension Property, Static Member ve Operator'ler
C# 14, .NET 10 ile birlikte extension member kavramını getiriyor; extension property, static üye ve operator tanımları artık extension blokları içinde yapılabiliyor. Bu, eski this parametreli extension method yaklaşımının ötesinde daha doğal bir API yazımı sunuyor. Migrasyon ve sınırlamaları bilmek, yeni özelliği üretimde kullanmadan önce önemli.
Kilit noktalar
- extension(Tip parametre) { ... } bloğu, receiver tipini bir kez tanımlar ve içindeki üyeler bu değere erişir.
- Extension property'ler, eski GetX() tarzı metotların yerine computed property olarak kullanılabilir.
- Parametresiz blok (extension(Currency)) static extension member ve operator tanımlamaya izin verir.
- Bloklar alan ve otomatik property tutamaz; önbellek statik sınıfın içinde tutulmalı.
- C# 14'te indexer desteği yalnızca önizleme durumunda; event desteklenmiyor.
- Eski this metotları yeni bloklarla birlikte çalışmaya devam eder, geçiş kademeli yapılabilir.
C# 3.0 ile gelen extension method'lar yaklaşık yirmi yıldır yalnızca instance metotlara izin veriyordu. C# 14 ve .NET 10 ile birlikte extension block yapısı geldi; bir blok, extension yapılacak tipi bir kez tanımlıyor ve içindeki property, static üye ve operator'ler bu tipi kullanabiliyor. Bu sayede bir türe dışarıdan computed property eklemek mümkün hale geliyor.
Bloklar hâlâ static bir sınıfın içinde yaşıyor, bu yüzden eski this metotları ile yeni üyeler yan yana kullanılabiliyor ve geçiş kademeli yapılabiliyor. Sınırlamalar da var: extension blokları alan ya da otomatik property tutamıyor, event desteklenmiyor ve C# 14'te indexer henüz yalnızca önizleme özelliği olarak sunuluyor. Yazar, ucuz ve yan etkisiz değerler için property, işlem gerektiren kodlar için metot kullanılmasını öneriyor.
Gerçek dünyada kullanımı
- Üçüncü parti bir modelde (ör. sipariş DTO'su) toplam tutar veya gönderilebilirlik gibi hesaplanmış değerleri property gibi sunmak.
- Kütüphane geliştiricisinin mevcut API'sini kırmadan yeni static fabrika üyeleri ve operator'ler eklemesi.
- Büyük bir kod tabanında this tabanlı extension method'ları adım adım extension block'lara taşıyan bir refactoring.
Neden önemli
Extension member'lar, C# 14 ile yazılan kodda daha okunur API'ler kurmayı sağlıyor; ancak alan, event ve virtual dispatch sınırlamaları nedeniyle hangi üyenin property, hangisinin metot olacağını bilerek seçmek gerekiyor.