Predicate Delegate Tanıyalım

Yazar: Cengiz Atilla
Kategori: C#.NET & VB.NET
Eklenme Tarihi: 7.1.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


Cengiz Atilla

Cengiz Atilla 02.11.1984 / İstanbul doğumludur . Nahit Menteşe Endüstri Meslek Lisesi Programcılık bölümünden mezun olmuştur .  2 yıllık Bursa Uludağ Unv Bilgisayar Programcılığı bölümünü bitirmiştir .

MCPD ve MCT ünvanlarına sahiptir.

atilla@cengizatilla.com
cengiz.atilla@hotmail.com
www.cengizatilla.com

Bu makaleye ilk yorum yapan siz olun.

Yorumunuz