Yazılımcının Günlüğü | YazilimGunlugu.Com
Arama
Makale Kategorileri
Üye Girişi
Şuanki online üyeler()
Aktif üye bulunmamaktadır.


Predicate Delegate Tanıyalım

Yazar: Cengiz Atilla

Kategori: C#.NET

Eklenme Tarihi: 07.01.2010 10:34:56

Merhaba Arkadaşlar; Bugun linq sorgularımızda özellikle arama işlemlerinde sık sık karsımıza cıkan predicate delegate i inceliyecegiz. Predicate delegate ler parametre olarak T tipi alan ama geriye bool yani true veya false deger dondurebilen metotları işaret eden delegate lerdir .

 

Code tarafında bakalım ...

Ogrenci.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PredicateDelegeInceleme
{
    class Ogrenci
    {
        public int Ogrenciid { get; set; }
        public string OgrenciAdi { get; set; }
        public string OgrenciSoyad { get; set; }
        public int Not1 { get; set; }
        public int Not2 { get; set; }
        public int Not3 { get; set; }

        public override string ToString()
        {
            return string.Format("Ogrenci ID {0} Ogrenci Adi {1} Ogrenci Soyad {2} Not1 {3} Not2 {4} Not 3 {5}", Ogrenciid, OgrenciAdi, OgrenciSoyad, Not1, Not2, Not3);
        }
    }
}

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace PredicateDelegeInceleme
{
    class Program
    {
        static void Main(string[] args)
        {
            // I.Yol : Predicate delegate mizin istedigi metotu dısarıda tanımladık ve o sekilde verdik ...
            Predicate<Ogrenci> OgrenciOrtalamaGectiKaldi = new Predicate<Ogrenci>(GectiKaldi);
            if (OgrenciOrtalamaGectiKaldi(new Ogrenci()
            {
                Ogrenciid = 1,
                OgrenciAdi = "Cengiz",
                OgrenciSoyad = "Atilla",
                Not1 = 50,
                Not2 = 33,
                Not3 = 70

            })) // delegate bana zaten bool donmekde bende bunu if blokları arasına aldım donen degere gore kullanıcıya mesaj yazdırdım ...
            {
                Console.WriteLine("Ogrenci Gecti");
            }
            else
            {
                Console.WriteLine(  "Ogrenci Kaldı");
            }

            // II.Yol 
            // isimsiz metot yapısını kullanarak ilgili delegate me tanımı atadım ...
            Predicate<Ogrenci> OgrenciOrtalamaGectiKaldiII = new Predicate<Ogrenci>(delegate(Ogrenci o)
                {
                    return ((o.Not1 + o.Not2 + o.Not3) / 3) > 45;
                });

            if (OgrenciOrtalamaGectiKaldiII.Invoke(new Ogrenci()
            {
                Ogrenciid = 1,
                OgrenciAdi = "Cengiz",
                OgrenciSoyad = "Atilla",
                Not1 = 23,
                Not2 = 44,
                Not3 = 100
            }))
            {
                Console.WriteLine("Ogrenci Gecti");
            }
            else
            {
                Console.WriteLine("Ogrenci Kaldı");
            }
            Console.WriteLine("Predicate delegate miz hangi metotları işaret etmekde ... ");
            foreach (Delegate item in OgrenciOrtalamaGectiKaldi.GetInvocationList())
            {
                Console.WriteLine("Metot Adı: {0}",item.Method.Name);
                Console.WriteLine("{0} Metot unun istedigi parametreler", item.Method.Name);
                foreach (ParameterInfo metotbilgi in item.Method.GetParameters())
                {
                    Console.WriteLine("Parametre Adı : {0} - Tipi : {1}", metotbilgi.Name, metotbilgi.ParameterType);
                }

            }

 

        }

        static bool GectiKaldi(Ogrenci o)
        {
            if (((o.Not1 + o.Not2 + o.Not3) / 3) > 45)
            {
                return true;
            }
            else
            {
                return false;
            }
 
        }
    }
}

Predicate delegate leri özellikle linq sorgularımızı yazar iken yogun bir sekilde kullanıyor olucaz  ...

.net ile kalın

Yazar Hakkında Yorum Yok Yorum Yaz Yazara ait diğer Makaleler
Tema
Anket
Visual Studio 2010 Beta 2'yi denediniz mi?


En Çok Okunan Makaleler
En Son Eklenen Makaleler
Soru Merkezinde Bekleyenler
Ana Sayfa | Hakkımızda | Editörler | Yazarlar | RSS RSS | İletişim
Yazılım Günlüğü 2007-2009 © Tüm Hakları Saklıdır.