Muhammed Tahiroğlu yazıyor
Yazılım ve Sanat

Var Olan Tipleri Zenginleştirmek ya da Extension Metodlar

Ekim 2, 2007 23:57, Muhammed

Başlığımız seçenekli başlık. Okuyucu hangisine yakın ise öyle kabul ede.

Bahsedeceğimiz konu .NET 3.5 ile ilgili. Şimdi bir kısım okuyucunun, "Biz daha 2.0'a terfi edemedik, sen 3.5'tan haber getiriyorsun" sitemleri ulaşacaktır bize. Sakin olunuz efendim, arada bu kadar telaş edecek 1.5 sürüm yok. Bilmelisiniz ki Microsoft, 3.0 sürümünde "framework"te değişikliğe gitmedi. 2'nin üzerine yeni sistemler (foundation) bina etti.

"Orcas" kod adıyla haber edilen yeni geliştirme ortamı .NET'in 3.5 sürümünü de gün yüzüne çıkartacak. Ancak iddia edilen o ki, artık Visual Studio her framework sürümüne hitaben program derleyebilecek. Manası: "Orcas"ı açıp 1.1 için uygulama geliştirebilmek.

.NET 3.5 ile, framework üzerine güncellemeler yapılmış. Bunladan birisi de hayli kullanışlı olacak olan "Extension Metod"lar.

Daha evvelden bir tipe ek özellikler kazandırmak için, ondan yeni bir tip türetme (Inheritance) yolunu izlerdik. Son derece dar bir yoldu bu. Meselâ, System.Object tipine bir metod eklemeyi hayal edin. Her şey System.Object'ten türediği için ortalıkta dolaşan tüm tiplerde de bu metodun geçerli olduğunu da hayal edin. Mümkün olabilir miydi?

Şimdi bu mümkün.

Bu yeni sürümde istediğiniz bir tipe, sistem tiplerine dahi, ilave metodlar ekleyebilirsiniz. Mesela ScottGu kardeşimizden aldığımız kod örneğinde, kendisi string tipine -çok ihtiyaç duyduğundan olacak- e-posta adres testi eklemiş:

public static class ScottGuExtensions
{
    public static bool IsValidEmailAddress(this string s)
    {
        Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
        return regex.IsMatch(s);
    }
}

Bu metodun string tipine katışması sıradan bir .NET 3.5 mucizesi. Bu kodu derleyip bir assembly halinde dağıttığınızda, kullanan kişilerin string tipleri de bu güzide ilavelerle şenlenecek demektir.

Yani müşterileriniz,

string mailAddress = "kandırıkçımailadresi";

if( mailAddress.IsValidEmailAddress() )
{
 ...
}

gibi kodlar yazabilecek.

Ne kadar hoş.

Türetimden (inheritance) daha yaygın bir sonuç elde ediyorsunuz. Üstelik anlaması ve uygulaması çok daha kolay.

"Extension Metod" tekniği bir çok senaryoda işe yarayabilir. Zaten öncelikle .NET 3.5, kendi bünyesinde fazlasıyla kullanıyordur. Bizim aklımıza ilk gelen yer Utility kütüphaneleri. Artık bu kütüphaneler "extension" hâlinde yazılırsa, bir anda elimizdeki tüm tipler zenginleşecek demektir. Gözünü dolar bürümüş bileşen şirketleri şimdiden paralı "extension"lar yazıyorlarsa hiç şaşırmayız.

Related posts

Yorum ekle


(Gravatar simgesini gösterecek)  

  Country flag




 
EOS 40D
Site Meter