mehmetduran.com - Paylaşmak Güzeldir...
C# ile Extension Metot Yazma ve Kullanma (Lambda Expression Dahil)
Bu yazımda C Sharp ile Extension metot tanımlamayı ve bu metotları kullanmayı göstermeye çalışacağım. Extension metotlar kullandığımız programlama dilinde tanımlı olan tipler ile beraber kullanılan ve oldukça kolaylık, esneklik sağlayan metotlardır. C Sharp ile kodlama yapan herkesin bilmesi gerektiğini düşünüyorum. Özellikle generic class kullanılan uygulamalarda, Linq to Sql, NHibernate kullanılan uygulamalarda ve dizi işlemlerinin bol olduğu uygulamalarda oldukça kullanışlı ve kolaylık sağlıyor. Bu sebeple bu tür metotları nasıl yazacağımızı ve nasıl kullanabileceğimizi göstermeye çalışacağım.

Öncelikle kullanacağım yapıyı (Struct) içeren kodlara ve hazırladığım extension metotların kodlarına göz atalım.

// Örnek için hazırlanan Insan yapısı
public struct Insan
{
  public string Ad { get; set; }
  public string Soyad { get; set; }
  public int Yas { get; set; }
  public bool Askerlik { get; set; }
 
  public override string ToString()
  {
    return Ad + " " + Soyad;
  }
}
 
 
// Extension metotların tanımlandığı sınıf
public static class ExtensionsMethods
{
 
  // string parametre'ye göre index bulan metot - eğer değere uygun kayıt yoksa -1 döner
  public static int Index<T>(this IEnumerable<T> veriler, string parametre)
  {
    int sonuc = -1, varmi = 0;
    foreach (T veri in veriler)
    {
      sonuc++;
      if (veri.ToString() == parametre) break;
      else { varmi++; }
    }
    if (varmi == veriler.Count()) { sonuc = -1; }
    return sonuc;
  }
 
  // Lambda Expressions ile sorgulama yapılabilen ve sonuçta veriler elde edilen metot
  public static IEnumerable<T> BulGetir<T>(this IEnumerable<T> veriler, Func<T, bool> expressions)
  {
    List<T> sonuc = new List<T>();
    foreach (T veri in veriler)
    {
      if (expressions(veri))
      {
        sonuc.Add(veri);
      }
    }
    return sonuc;
  }
 
}

Görüldüğü gibi C Sharp'ta extension metotlar bu şekilde tanımlanıyor. Verdiğim kodlarda dizi türünde veri yapılarında belirli bir parametreye göre index bulan Index metodu ve yine aynı şekilde dizi türündeki veri yapılarında belirli parametrelere (Lambda Expression) göre verileri çeken BulGetir metodu bulunmakta. Aslında C Sharp içinde tanımlı olarak gelen extension metotlar ile bu işlemler rahatlıkla yapılsa da bu tür metotların nasıl yazıldığını ve mantığını görmek için bu örneğin anlaşılır olduğunu düşünüyorum. Extension metot olarak tanımlanan BulGetir metodu C Sharp'ta hazır olarak gelen Find, FindAll, Where, vb. gibi metotlar ile aynı işlemi yapmakta.

Bu metotları kullanarak elde ettiğim sonuçları aşağıda görebilirsiniz.

C# ile Extension Metot Yazma ve Kullanma (Lambda Expression Dahil)

C# ile Extension Metot Yazma ve Kullanma (Lambda Expression Dahil)

C# ile Extension Metot Yazma ve Kullanma (Lambda Expression Dahil)

Extension metotlar her projede kullanılabilecek ve programcıya oldukça rahatlık sağlayacak metotlardır. Örnekte vermiş olduğum metotların benzerleri hazır olarak geliyor ama amacım bu türlü metotların nasıl yazıldığını ve nasıl kullanıldığını göstermekti. Bu şekilde extension metot tanımlanmakta ve kullanılmakta. Buna benzer olarak birçok konuda extension metot tanımlanabilir ve kullanılabilir. Örneğin matris ile uğraştığımız konularda eldeki matrisi çeşitli derecelerde çeşitli yönlerde dönderen ve yeni matris elde eden metotlar tanımlayabilir ve kullanabiliriz. Graph yapıları ile ilgileniyorsak bu yapı için extension metotlar yazabiliriz.

Bu metotları bir kütüphane altında veya Dll içinde toplarsak lazım olan tüm projelerde kullanabiliriz.

İyi Çalışmalar.
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar Geliştirdiğim Uygulamalar Bölümü Bloğum Dmoz'a Eklendi Linq Unleashed for C# (E-Book) Kullandığım Email Sınıfı (Çoklu Mail ve Dosya Gönderimi) Asp.net MVC Captcha Uygulamam
Yorumlar
Yorum Yaz
RSS Yorum Takibi
Emrah YAZAR 03 Haziran Perşembe 2010 08:26 #1
Kardeşim paylaşımların için teşekkür ederim. Gerçekten kolaylık sağlayacak methodlar. Şöyle bir sorum olacak veritabanı işlemlerinde senin paylaşmış olduğun ajax kullanarak facebox uygulaması hız açısından normal yapılan postback uygulamalarına göre ciddi bir hız farkı varmı ? Senin paylaşmış olduğun render methdodu hız açısından daha da gelişebilir mi ? Bunun için inceleyebileceğim bir yer var mı? Teşekkürler.
Mehmet Duran 03 Haziran Perşembe 2010 13:41 #2
Merhaba. Söylemiş olduğun yapıyı hem veritabanı işlemleri için hem de veri sorgulama, gösterme işlemleri için kullanabiliriz. Nitekim yaptığım her uygulamada bu yapıyı kullanmaktayım ve hız açısından, performans açısından postback ile yapılan işlemlere göre oldukça iyi. Postback ile yapılan işlemlerde bir takım işlemler boş yere tekrarlanıyor. Ama bu tür işlemlerde sadece belirli alanlar için istek yapılıyor. Yani performans bakımından çok çok iyi. Hız bakımından da oldukça iyi. Kullanmış olduğum yöntemin genel mantığı böyle. Birkaç değişik yolla da aynı işlem yapılsa da çalışma süreleri pek değişmez. Zaten çalışma süresi oldukça düşük değerlerde. Kullandığım kodların son halini burada paylaştım. Küçük bir de örnek var.
İsim :
Site :
Yorum :

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.
Büyük işler gibi, büyük düşüncelerinde davula ihtiyaçları yoktur.
Bölümler
Yazılar
Arşiv
Arama
Linkler
Site İçi Arama
Son Zamanlarda Ne Yapıyorum ?
İstatistikler - Araçlar - Reklam
İstatistikler
Sayaç
Mehmet Duran | mehmetduran.com | Copyright © 2009