Temsilciler bir veya birden fazla methodu referans gosteren tiplerdir.(type). Temsilciler metodu çalışma zamanında işaret edebilir, parametre yollayabilir, geri dönüşdeğerlerinide verebilriler ve hangi method veya methodların çağrılacağını karar verebilirler. Biz tanımlama yaparken method ismi yerine bir kod blogu yazabiliriz. Bu kod bloklarına isimsiz(Anonymous) methodlar denir. Lambada deyimiyle de bu bir methodun referansını bir temsilciye aktarabiliriz.
using System;
namespace Temsilciler
{
delegate int temsilci(int a);
delegate int temcilci2(int a, int b);
delegate void temcilci3();
class Program
{
static void Main(string[] args)
{
Hesap hesapla = new Hesap(5);
temsilci bul = new temsilci(hesapla.karesi);
// hesapla.Yaz(bul);
bul += hesapla.kupu; //karesine bulan method eklenir. Fakat 25 değerinin üzerine 125 değeri yazıldığı için 25 rakamını yazmaz.
hesapla.Yaz(bul);
bul = x => (x * 8);//lambada deyimini kullandım. sonuc /40
hesapla.Yaz(bul);
temsilci bul1 = new temsilci(x=>(x*7));// ikinci yeni bir temsilci sonuc 35
hesapla.Yaz(bul1);
temcilci2 tem = (x, y) => x + y * 10;
hesapla.Yaz(tem);//burada x=5 ve y=6 değerlerini methoddan alarak lambada deyimiyle kullanmayım.
temcilci3 dene = new temcilci3(delegate() { Console.WriteLine("isimsiz method"); });
dene += delegate() { Console.WriteLine("isimsiz method 2"); };//temsilcime yeni bir isimsiz (Anonymous) method ekledim.
dene();
}
}
class Hesap
{
public Hesap(int sayi)
{
this.sayi = sayi;
}
public int sayi;
public int karesi(int a)
{
Console.WriteLine("karesi çalıştı");
return a * a;
}
public int kupu(int a)
{
Console.WriteLine("Kupu çalıştı:");
return a * a * a;
}
//parametre bir metod;
public void Yaz(temsilci bulunacak)
{
Console.WriteLine(bulunacak(sayi));
}
public void Yaz(temcilci2 bulunacak)
{
Console.WriteLine(bulunacak(5,6));
}
}
}
Sanırım tüm konuyu anlatan güzel bir örnek.