Delegeler (C#)

Delegeler metodlarımızın adreslerini saklamamızda kullanılır. Diğer bir yandan da metodumuza parametre olarak başka bir metoduda gönderebiliriz. Delegeler referans türünden bir tiptir. Önemli olan nokta ise delegenin imzası, tuttuğu metodun imzası ile aynı olmalıdır.Özetle geriye dönüş tipi ve aldığı parametreler uyumlu olmalıdır. Metodlar delegeye bağlanma sırasına göre çalışır. Yani FIFO mantığına göre çalışır.

namespace DelegeCalisma
{
    class Program
    {

        // tanımlanan delegler (bunlar delegelerin imzalarıdır yani delegelerin bir çeşit tipleridir.)
        public delegate void Delegasyon();
        public delegate int Delegasyonu(int a, int b); //geri int değer tipini döndüren içerisine int tipinde değer olan delege

        static void Main(string[] args)
        {
            Delegasyon delege = new Delegasyon(metod2); // tanımladıgımız delegeye ait imzaya uygun metodumuzu delegemize gönderdik.
            delege.Invoke(); // invoke metodunu çağırdığımızda metodumuz çalışmış oldu.
            delege();        // bu iki kullanımda aynı görevi yapar. delege();--> arka planda invoke yapar.

            Console.WriteLine("--------");

            Delegasyonu del = new Delegasyonu(metodİslem); // metodları delegeye gönderirken delegenin imzasına uygun olmasına dikkat etmeliyiz.
            del(20, 40);
            Delegasyonu del2 = new Delegasyonu(metodİslem2); // uygun imzali metodu delegemize yükledik.
            del2.Invoke(40, 15); // metodumuzu çağırdık.

            Console.ReadLine();
        }
     static void metod2()
        {
            Console.WriteLine("ilk delegasyon calismam");

        }

        static int metodİslem(int a, int b)
        {
            int sonuc;
            sonuc = a + b;
            Console.WriteLine("sonuc:{0}", sonuc);
            return sonuc;
        }

        static int metodİslem2(int a, int b)
        {
            int sonuc;
            sonuc = a - b;
            Console.WriteLine("sonuc:{0}", sonuc);
            return sonuc;
        }
    }
}

İyi çalışmalar….

Bir cevap yazın

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