Extension metodlar genişletilmiş metodlardır, ister .net ile gelen string, integer, object gibi türler için istersek kendi yazdığımız sınıflar için genişletilmiş metodlar yazabiliriz.
Bir senaryo üzerinden extension metodları daha iyi anlayalım. 2 tane string değişken oluşturalım, ve amacımız string değişkeni bool değişkene çevirmek olsun.
string value1 = "true"; string value2 = "true2";
Şimdi iki tane bool türünde değişken oluşturalım
bool bool1, bool2;
string ifadeyi aşağıdaki gibi dönüştürme işlemi yapabiliriz.
bool1 = Convert.ToBoolean(value1); bool2 = Convert.ToBoolean(value2);
value1 değişkeni düzgün bir şekilde convert edilirken value2 değişkeni FormatException hatası alır. true2 string ifadesi bool türüne convert edilemez. Bu durumda try catch ile hatayı yakalamamız gerekir.
try { bool2 = Convert.ToBoolean(value2); } catch(Exception) { bool2 = false; }
Her ihtiyacımız olan kısımda try catch yazmak zahmetli olacaktır. Tam bu noktada bir kere extension metod yazıp her istediğimiz yerde onu kullanabiliriz.
Şimdi extension metod yazmak için kolları sıvayalım.
Extension metod yazmak için;
- Sınıf ve metodları static yazmamız gerekir,
- Metodun ilk parametresi this ile başlar ve sonrasındaki convert edilecek türü yazmamız gerekir.
- Namespace kısmını silebiliriz, bu bize esneklik sağlar.
O halde yazmaya başlayalım,
public static class StringExtensions { public static bool ToCustomBool(this string value) { } }
Yukarıda StringExtensions adında bir static sınıf oluşturdum ve altında ToCustomBool adında static bir metod oluşturdum. Burada parametre olarak aşağıdaki belirttiğim this string value kısmına dikkat edin.
(this string value)
Extension metodumuzun içini dolduralım,
public static class StringExtensions { public static bool ToCustomBool(this string value) { if (string.IsNullOrWhiteSpace(value)) { return false; } bool result = false; Boolean.TryParse(value, out result); return result; } }
Önce string.IsNullOrWhiteSpace ile value parametresinin null veya boşluklardan oluşup oluşmadığını kontrol ediyoruz, eğer null ise return false; ile metoddan çıkarak geriye false değerini döndürüyoruz.
Boolean.TryParse ile value değişkeninin parse işlemini gerçekleştiriyoruz ve out result değişkene değeri atıyoruz.
Sonuç
Yukarıdaki örnekler çoğaltılabilir, metod overload edilerek extension metodların daha esnek kullanılması sağlanabilir. Neden kullanmalıyız sorusunu cevaplamak gerekirse, "Tekrar eden kodlardan kaçınmak için kullanabiliriz" cevabını verebilirim.
Videoda daha fazla örnek ve senaryo ile anlattım, izlemenizi tavsiye ederim.
İncelemek isteyenler için Console uygulamasında yazdığım örneği de paylaşayım.
ConsoleApplication_GenericListCast.rar
Bir başka makalede görüşmek üzere :)