Code tarafına gecelim .
Ilk once uzerinde işlem yapıcagımız ogrenci tipimizi olusturalım ...
ogrenci.cs
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} Adı {1} Soyad {2} Not1 {3} Not2 {4} Not3 {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 FuncDelegateInceleme
{
class Program
{
static void Main(string[] args)
{
// Bir adet func delegate tanımlayalım bu delegate miz bizden ogrenci tipi alsın double olarak o ogrencinin bize ortalamasını dondursun ....
// I.Yol.
/* I.Yolda ilgili func delegate mizin bizden istedigi metotu biz dısarıda olusturup verdik ortalamahesapla adındaki metotumuzu belirttik ve daha sonra bize donen degeri double uzerine aldık ve ekrana yazdırdık ... */
Func<Ogrenci, double> OgrenciNotOrtalamasiI = new Func<Ogrenci, double>(OrtalamaHesapla);
double GelenOrtalamaI = OgrenciNotOrtalamasiI(new Ogrenci()
{
Ogrenciid = 1,
OgrenciAdi = "Cengiz",
OgrenciSoyad = "ATİLLA",
Not1 = 50,
Not2 = 60,
Not3 = 70,
});
Console.WriteLine("Ogrencinin Ortalamasi {0}", GelenOrtalamaI);
// II.Yol
/* Ikinci olan bu yolumuzda ise func delegate mizin bizden istedigi metot u isimsiz metot larımızı kullanarak verelim ...
*/
Func<Ogrenci, double> OgrenciNotOrtalamasiII = new Func<Ogrenci, double>(delegate(Ogrenci o)
{
return (o.Not1 + o.Not2 + o.Not3) / 3;
});
double GelenOrtalamaII = OgrenciNotOrtalamasiII(new Ogrenci()
{
Ogrenciid = 1,
OgrenciAdi = "Oguz",
OgrenciSoyad = "BABA",
Not1 = 50,
Not2 = 50,
Not3 = 70
});
Console.WriteLine("Ogrencinin Ortalamasi İsimsiz Metot ile {0}", GelenOrtalamaII);
// func delegate mizin işaret ettigi metotları bulalım ...
Console.WriteLine("Func delegemizin işaret ettigi metotlar aşagıdaki gibidir ... ");
foreach (Delegate item in OgrenciNotOrtalamasiI.GetInvocationList())
{
Console.WriteLine(item.Method.Name);
// func delegatemizin işaret ettigi metotumuz bizden istedigi parametreleri ogrenmek icin ise
foreach (ParameterInfo parametresi in item.Method.GetParameters())
{
// item.Method.GetParameters() metotumuz bize ParameterInfo[] şeklinde dönmektedir . ilgili bu tipi kullanmak icin System.Reflection using etmemiz gerekir . daha sonra metotlarımızın istedigi parametreleride bu sekilde gorebiliriz ...
Console.WriteLine("Parametre adı {0} - Tipi {1}", parametresi.Name, parametresi.ParameterType);
}
}
}
static double OrtalamaHesapla(Ogrenci o)
{
return (o.Not1 + o.Not2 + o.Not3) / 3;
}
}
}
Func delegate lerimizi ozellikle linq sorgularımız yazar iken yogun bi sekilde kullanıcagız ...
.Net le kalın