C# 14 Extension Members: Sessiz Gölgeleme Hatası
C# 14'ün extension members özelliği, kodun okunabilirliğini artırırken gizli bir tehlike taşıyor: derleyici hiç uyarı vermeden, gerçek bir üye ile extension üyesi arasında sessiz bir çakışma yaşanabilir.
Kayıt türü Order'ı üç farklı serviste paylaşan bir ekip, kargo promosyonu için extension üyesi ekliyor:
1extension(Order order)2{3public bool IsEligibleForFreeShipping => 4order.Total >= 50m && order.Region == "EU";5}Tüm call sitelar bu property'i kullanıyor. Haftalarca sonra, başka bir mühendis aynı kuralı doğrudan Order sınıfına gerçek bir üye olarak ekliyor. Derleyici sıfır uyarı verir. Kod başarıyla derlenir. Ancak artık extension member sessizce gölgelenmiştir, çağrılar artık gerçek üyeyi kullanıyor, extension member hiç çalışmıyor. Hata bulunana kadar, davranış farklı olabilir, testler geçebilir veya üretimde sorun oluşabilir.
Bu, extension members'ın en büyük zayıflığı: extension üyeleri, sınıf üyeleriyle aynı ad taşıdığında derleyici bunu hata olarak görmez. Uyarı bile vermez. Gölgeleme sessizdir.
Korunmanın en pratik yolu, extension members'ı ayrı bir namespace'te toplamak ve CI/CD'de statik analiz araçları (Roslyn analyzers) çalıştırmak. Ekip içinde de kurallaştırma lazım: extension member eklemeden önce, asıl sınıfa eklenmeyeceğini kontrol et. Veya extension members'ı sadece read-only, hesaplanmış özellikler için sınırla, doğrudan state'i değiştirmeyen işlemler.
C# 14'ün syntax'ı gerçekten temiz, ama derleyicinin sessizliği maliyetli olabilir. Kodun büyüdüğü takımlar için bu tip gölgeleme hataları debug etmek zaman kaybı demek.
0 yorum