Bir delegeye birden çok metod bağlayabiliriz ve metodları bağlanma sırasına göre (FIFO) mantığına göre çağırabiliriz.Bu yönteme “Multicast” denir.
GetInvocationList isimli fonksiyon delegenin hangi metodla ilişkili olduğunu öğrenmemizi sağlar.
namespace Delegeler2
{
//main kısmı
delegate void delege (int a,int b); //delegemizin imzasını tanımladık.
class Program
{
static void Main(string[] args)
{
Classİslem nesne = new Classİslem();
delege temsilci = new delege(nesne.topla); // delegemize klasik olarak ilk metodu tanımladık.
temsilci += nesne.bol;
temsilci += nesne.carp; // delgeye birden fazla metod bağlanabilir.Bağlanma sırasına göre çağırma yapılır.Çoklu metod ekleme yani multicast :)
temsilci += nesne.cikar; //önce topla metodu sırasıyla diğer metodlar görüntülenir. FIFO'ya göre çağırıldı.
temsilci -= nesne.cikar; //cikar metodunu delegemizden çıkardık.
temsilci(30, 15);
Delegate[] metodlar = temsilci.GetInvocationList();
// GetInvocationList delegenin ilişkili olduğu fonksiyonunu belirtir.
foreach (var item in metodlar)
{
Console.WriteLine("Metodun adı:" + item.Method.Name);
// cikar metodunu delegeden ayırdığımız için, console ekranında cikar metodu gözükmez.
}
Console.ReadLine();
}
}
}
//Interface kısmı
namespace Delegeler2
{
interface Iislem
{
void topla(int x, int y);
void cikar(int x, int y);
void bol(int x, int y);
void carp(int x, int y);
}
}
//class kısmı
namespace Delegeler2
{
class Classİslem:Iislem
{
public void topla(int x, int y)
{
Console.WriteLine("sonuc:{0}",(x+y));
}
public void cikar(int x, int y)
{
Console.WriteLine("sonuc:{0}",(x-y));
}
public void bol(int x, int y)
{
Console.WriteLine("sonuc:{0}",(x/y));
}
public void carp(int x, int y)
{
Console.WriteLine("sonuc:{0}",(x*y));
}
}
}
iyi çalışmalar…
Delegelerleden Lambda Expression’a bağlantı yapan yazıları devamında görmeyi umuyorum:)