crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
C# Extension Methods: Mevcut Tiplere Yeni Yetenekler Kazandırın
Extension Methods, bir sınıfın kaynak kodunu değiştirmeden, o sınıfa dışarıdan yeni metotlar eklemenizi sağlar. Bu metotlar sanki o sınıfın orijinal bir parçasıymış gibi "nokta" (.) operatörüyle çağrılabilir.
1. Extension Method Yazmanın 3 Altın Kuralı
Bir metodun "genişletme metodu" olabilmesi için şu kurallara uyması şarttır:
[]Static Sınıf: Metot mutlaka static bir sınıf içerisinde olmalıdır.
[]Static Metot:** Metodun kendisi de static olmalıdır.
[*]this Parametresi: Metodun ilk parametresi, hangi tipi genişleteceğini belirtmeli ve başında this anahtar kelimesi yer almalıdır.
C#:
public static class StringExtensions
{
// string tipini genişleten bir metot
public static int KelimeSayisi(this string metin)
{
if (string.IsNullOrEmpty(metin)) return 0;
return metin.Split(' ').Length;
}
}
2. Kullanım: Orijinal Metot Gibi Çağırmak
Yazdığınız metot, ilgili namespace dahil edildiği anda o tipteki tüm değişkenler için kullanılabilir hale gelir.
C#:
string cumle = "C# programlama dili harikadır";
// Normalde string sınıfında KelimeSayisi() diye bir metot yoktur.
// Ama biz artık onu sanki varmış gibi çağırabiliyoruz:
int adet = cumle.KelimeSayisi();
Console.WriteLine($"Kelime adedi: {adet}"); // Çıktı: 4
3. Parametre Alan Extension Metotlar
İlk parametre (this ile başlayan) her zaman genişletilen tipi temsil eder. Eğer metodun başka parametrelere ihtiyacı varsa, bunlar ikinci parametreden itibaren yazılır.
C#:
public static class SayiExtensions
{
public static bool AraliktaMi(this int sayi, int altSinir, int ustSinir)
{
return sayi >= altSinir && sayi <= ustSinir;
}
}
// Kullanım:
int benimSayim = 25;
bool sonuc = benimSayim.AraliktaMi(10, 50); // true
4. Neden ve Nerede Kullanılır?
[]LINQ'nun Temelidir: Aslında hepimizin kullandığı .Where(), .Select(), .OrderBy() gibi LINQ metotlarının tamamı IEnumerable arayüzü için yazılmış extension metotlardır.
[]Okunabilirlik (Fluent Interface): Karmaşık işlemleri yan yana dizerek okunması kolay yapılar kurmanızı sağlar.- Mühürlü (Sealed) Sınıflar: Miras alınması engellenmiş sınıflara (örneğin string) yeni özellik eklemenin tek yoludur.
| Özellik | Avantajı |
|---|---|
| Kod Temizliği | Helper sınıflarına olan bağımlılığı azaltır, daha doğal bir yazım sunar. |
| Bakım Kolaylığı | İlgili tipe ait özel işleri tek bir extension sınıfında toplayabilirsiniz. |
| Erişim | Sadece statik üyeler değil, nesnenin tüm public üyelerine erişebilir. |
Dikkat Edilmesi Gerekenler
[]Eğer sınıfın içinde aynı isimde ve aynı parametrelerde orijinal bir metot varsa, orijinal metot önceliklidir ve sizin extension metodunuz asla çalışmaz.
[]Extension metotlar, genişlettikleri sınıfın private veya protected üyelerine erişemezler; sadece public olanları görebilirler.- Aşırı kullanımı kodun takibini zorlaştırabilir; bu yüzden mantıklı ve evrensel ihtiyaçlar için tercih edilmelidir.
Sonuç
Extension Methods, C# geliştiricilerine müthiş bir esneklik sunar. Kendi kütüphanelerinizi oluştururken veya sık yaptığınız işlemleri (Tarih formatlama, metin temizleme vb.) standartlaştırmak istediğinizde en büyük yardımcınız olacaktır.