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