Extension Method Nedir? Nasıl Kullanılır?

Extension Method Nedir? Nasıl Kullanılır?

Extension method nedir konusuna direk kelime anlamından gitmekte fayda olduğunu düşünüyorum. Extension kelimesinin anlamı genişletme, arttırmadır. Extension method ise genişletilebilir method demektir. Var olan sınıflarımız zaten belli başlı metotlara sahiptir ama bizim istediğimiz, işimizi görecek bir metoda sahip olmayabilir. İşte tam bu noktada extension method kavramı bizim bu sorunumuzu çözecektir.

Şimdi küçük bir örnekle konuyu biraz daha iyi anlayalım. Bir string ifademiz olsun. Bu string ifade içinde geçen küçük harf sayısını bulmak isteyelim.

Şekil 1

Şekil 1 görüldüğü gibi string bir ifade tanımlayıp nokta ile onun kullanılabilir metotlarını erişebilmekteyiz. Bizim amacımız value adlı string değişkende bulunan küçük harf sayısını öğrenmektir ama var olan metotlar arasında bu işlemi yerine getiren bir metot bulunmamaktadır. Hadi gelin kendi extension sınıfımızı oluşturup yazacağımız extension method ile işlemimizi gerçekleştirelim.

Şekil 2

Şekil 2 de görüldüğü üzere extension sınıfımız içinde extension metodumuzu tanımladık. Burada bazı önemli hususlar bulunmaktadır. Bunlardan ilki tanımlayacağımız sınıfın ve metodun static ile tanımlanmasıdır. Static ifadesi temelde bulunduğu sınıftan nesne oluşturulmadan kullanılabilen üyeler için kullanılır. Yani program.cs sınıfında bu metodu kullanmak için new anahtar kelimesine ihtiyaç duymayacağız. Bir diğer önemli husus ise this anahtar kelimesinin kullanılmasıdır. Bu anahtar kelime ile genişleteceğimiz sınıfı ifade etmiş oluyoruz. Metodun içinde IsLower metodu ile string değişkenimizin her elemanını kontrol edip küçük harfle karşılaşıldığı zaman count değişkenini 1 arttırıyoruz ve en sonunda bu değeri geri dönderiyoruz.

Şekil 3

İşte şimdi value. dediğimiz zaman biraz önce yazdığımız LowerCaseCount adlı extension metodumuz görülmektedir.

Şekil 4

Son olarak value.LowerCaseCount() ifadesini yazdırdığımız zaman sonuc 13 olarak karşımıza çıkıyor.

Bir diğer örnek olarak ise servislerimizi kayıt etme işlemini kullanabiliriz.

Şekil 5

Eğer servislerimizi kaydederken merkezi başka bir yapı kullanmıyor, IoC container kullanmıyorsak servislerimizi yukarıdakı gibi kaydedebiliriz. Yukarıdaki yöntem pekte sağlıklı bir yöntem değildir çünkü pekçok servisimizin olabileceğini düşündüğümüzde yukarıdaki yöntem Startup sınıfımızın okunabilirliğini azaltıp, yönetilemez hale getirebilir. İşte burada da extension metotlardan yararlanabiliriz.

Şekil 6

Şekil 6 daki örnek, microservis projesinin order servis kısmında alınmıştır. Microservis projesini incelemek isteyenler için github adresine buradan erişebilirsiniz. Burada Infrastructure katmanındaki servisler extension metot kullanılarak kaydedilmiştir. Tıpkı ilk örnekte olduğu gibi static bir sınıf ve static bir metot tanımlanmıştır.

Bir önceki örnekte string sınıfı genişletildiği için this anahtar kelimesi ile string ifadesini kullanmıştık. Burada IServiceCollection arayüzünü genişleteceğimiz için this ile birlikte bu arayüzü kullandık. Bu arayüz bize servislerimizi kaydetme imkanı sunar. Metot içindeki configuration parametresi ise appsettings.json dosyasındaki verilere erişmemizi sağlar. Burada gerekli işlemlerimizi yapıp son olarak services parametresini geri döndürüyoruz.

Şekil 7

Son olarak ConfigureServices metodunda services.AddInfrastructureService(Configuration) ifadesi ile servislerimizi kayıt etmiş oluyoruz. Bu sayede Startup dosyamız çok daha sade bir hal almış oluyor. Servislerimizi kayıt etmek için bu yöntem en iyi yöntem değildir ben burada sadece extension method kullanımını farklı bir bakış açısıyla anlatmak istedim.

Umarım faydalı bir yazı olmuştur. Gelecek yazılarda görüşmek üzere.
İyi Çalışmalar.

Yorum bırakın