Delegeler (Multicasting-GetInvocationList)

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…

0 thoughts on “Delegeler (Multicasting-GetInvocationList)

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir