Extension Method (Genişletme Metodları) Nedir? (C#)

Buse Nur Şahin
3 min readDec 27, 2023

--

Proje geliştirirken hazır kütüphanelerden sıklıkla faydalanıyoruz. Kullandığımız hazır kütüphaneleri proje ihtiyaçlarına göre genişlettiğimiz durumlar olmalı çünkü bir kütüphanenin yalnızca kendi haliyle tüm projelerdeki tüm ihtiyaçlara cevap üretebilmesi pek olası değil.

Kullanılan kütüphaneleri proje ihtiyaçlarına göre genişletirken kalıtım almak gibi, method ezme gibi farklı yöntemler kullanabiliyoruz. Yazının konusu olan Extension Method bu yöntemlerden biri aslında.

Photo by Kevin Butz on Unsplash

Bir örnek üzerinden gitmenin daha doğru olduğunu düşünüyorum. Mesela biz bir proje oluşturduğumuzda hazır gelen String veri tipi var. Bu veri tipi aslında bir sınıf ve içerisinde methodları var, metindeki harfleri büyüten method olan ToUpper veya verilen karaktere göre metni parçalayarak diziye çeviren Split methodu gibi.

Peki bizim farklı bir ihtiyacımız olduğunda?

Ve bu farklı ihtiyacımızı String değerler üzerinden direkt çağırmak istediğimizde?

Hadi Split methodundan bir örnek verelim.

Split methodu String ifadeleri verilen ifadeye göre bölerek dizi haline çeviren bir methoddur. Normalde ilgili bölücü karakteri (separator) vererek diziye çevirme işlemini sağlayabiliriz ama biz direkt boşluklara göre bölen ve ekstra bir karakter vermemizi istemeyen bir method olsun isteyelim.

Bunu nasıl yaparız?

İstediğimiz şey bir metin yazdıktan sonra Split methodunu çağırabildiğimiz gibi MySplit methodunu çağırmak. Dolayısıyla bir String üzerinde bu methodu çalıştırmam lazım.

Nasıl yaparım?

Hazır olan String sınıfını bulup gidip o sınıfa bir ekleme mi yapmalıyım? Tabii ki hayır. Hazır sınıfları ve kütüphaneleri değiştirmemeliyiz.

Peki nasıl String’e bağlı yeni bir method yazarım?

Öncelikle static bir sınıfımız olması gerekiyor, genelde isimlendirme ilgili sınıf + Extensions olarak yapılır.

public static class StringExtensions
{
}

Bu sınıfa static bir method ekleyeceğiz. Peki bu methodun hangi sınıfın extension methodu olduğunu nasıl belirteceğiz?

Özel bir parametre ile.

public static string[] MySplit(this String metin)
{
var result = metin.Split(' ');
return result;
}

Yukarıdaki kodda

  • static bir method var, bu extension methodun bir şartı
  • bu method this String tipinde bir parametre alıyor, bu da hangi sınıfa extension yazdığımızı belirtmek için kullandığımız bir alan
  • string dizisi dönüyor çünkü bölme işlemi yapacağım
  • method içerisinde String sınıfından hazır gelen Split methodunu kendime göre özelleştirmek istediğim boşluk karakterini kullanıyorum
  • dönüş değeri olarak aldığım ise sonucu veriyorum

Extension Methodu çağıralım

Artık String ifadelerde MySplit methodu da çağırılabilir oldu, bunu sağlayan Extension Method yazmış olmamız.

Program çıktısı ise şöyle

Bu basit örnekten sonra C# ile kurumsal proje geliştirme tecrübesi olanların aşina olduğu DevExpress ürününün demo kodlarından birine bakacağız.

https://github.com/DevExpress/DevExtreme.AspNet.Mvc-Demos-NETCore/blob/master/WidgetGallery/Extensions.cs#L12

DevExpress Widget Gallery altındaki bu kodda .Net ModelStateDictionary sınıfına bir extension method yazıyor ve kompleks bir obje içerisinde gelen hata mesajlarını birleştirerek tek bir metin halinde String veri tipinde döndürüyor.

En basit haliyle Extension Methodu anlatmaya çalıştım ve sonrasında gerçek hayatta nasıl bir kullanımı olduğuna dair kod örneği paylaştım. Umarım öğrenme sürecinize faydası olmuştur.

Konu hakkında Burak Selim Şenyurt hocamızın yıllar önce kaleme aldığı şu muhteşem yazısına da bakabilirsiniz.

Okuduğunuz için teşekkür ederim, iyi çalışmalar

--

--

No responses yet