-- C#

C# ile Extension Metot Kullanımı

Merhabalar,

C# programlama diliyle gelişmiş mimari ve yazılımlar oluştururken bir çoğumuz için kolaylaştırıcı bazı ek ihtiyaçlar oluşabiliyor. Mesela, projede kullandığınız her int ya da string gibi nesnelerde kullandığınız bir iş süreci olabilir. Bir int’in sık sık matematiksel bir işleme tabi tutulması, bir string nesnesinin boşluk kontrolü yapılması ve sonucunda log tutulması ya da geriye boolean bir değer dönülmesi vb. ihtiyaçlarla sık sık karşılaşırız. Böyle durumlarda iş katmanında onlarca yüzlerce metot geliştirilebilir. Ancak her seferinde basit ya da karmaşık bir işlem için bir metot çağırmak bile gereksiz olabilir. Daha basit ve etkili bir yöntemi olmalıdır. İşte bu etkili yöntem genişletilmiş metotlardır.

Projenizde herhangi bir tip için sık kullanacağınız ve tüm proje boyunca her yerde o veri tipi üzerinden kolayca ulaşabileceğiniz yetenekler geliştirmek için Extension Method’lar tercih edilebilir.

Bu özelliği ilk kez duyanlar ya da duymuş ama hiç pratik etmemiş kişiler için zormuş gibi gelebilir. Ancak gayet basittir…

Extension Method örneğimiz için MyExtensions adında yeni bir sınıf oluşturacağız.

Kural 1 : Temel kurallarımızdan biri, oluşturduğumuz sınıf “static” olmalıdır.
Kural 2 : Bu sınıf içerisinde genişletilmiş metot olarak planlanan tüm metotlar parametrelerini “this” anahtar sözcüğüyle almalıdır.

public static class MyExtensions
{
    /// <summary>
    /// Her object tipi için kullanılabilir olan genişletilmiş metot.
    /// Kullanılan object nesnesinin Assembly Info bilgilerini döner.
    /// </summary>
    /// <param name="obj"></param>
    public static void DisplayAssemblyInfo(this object obj)
    {
        Console.WriteLine("Object Type : {0}, Assembly : \n",
                        obj.GetType().Name,
                        Assembly.GetAssembly(obj.GetType()).GetName().Name);
    }

    /// <summary>
    /// Projedeki her int veri tipi için kullanılabilir olan "karesini alma" metodudur.
    /// </summary>
    /// <param name="i"></param>
    /// <returns></returns>
    public static int Square(this int i)
    {
        return i * i;
    }

    /// <summary>
    /// Projedeki her IEnumerable interface'ine sahip nesne için kullanılabilen "item'ları listele" metodudur.
    /// </summary>
    /// <param name="iterator"></param>
    public static void ShowItems(this System.Collections.IEnumerable iterator)
    {
        foreach (var item in iterator)
        {
            Console.WriteLine(item);
        }
    }
}

Bu sınıfın kullanımı ise şöyledir;

Hangi tip nesne için genişletme uyguladıysanız o tipi kullandığınızda noktaya(.) basmanız yeterlidir.

Adsız

 

 

 

 
Uygulama kodları ise;

// Program sınıfının Assembly bilgilerini istiyoruz.
object obj1 = new object();
obj1 = new Program();

obj1.DisplayAssemblyInfo();

Console.WriteLine("*************");

// String bir nesnenin Assembly bilgilerini istiyoruz.
string str = "Cihan Özhan";
str.DisplayAssemblyInfo();

Console.WriteLine("*************");

// İnteger bir nesnenin Square() adındaki genişletme metodunu çağırıyoruz.
int i = 5;
Console.WriteLine(i.Square());

Console.WriteLine("*************");

// Bir ArrayList'in Assembly bilgilerini istiyoruz.
ArrayList liste = new ArrayList();
liste.Add("Ali");
liste.Add("Veli");

liste.ShowItems();

Program çıktısı aşağıdaki gibidir;

Ekran Alıntısı

 

 

 

 

 


İyi çalışmalar
Cihan Özhan

Yorumla

Yorum