Delegate, Lambada operatörü ve isimsiz(Anonymous) methodlar

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. 

 

The file '/Custom/Widgets/Calendar/widget.cshtml' does not exist.The file '/Custom/Widgets/Category list/widget.cshtml' does not exist.The file '/Custom/Widgets/Tag cloud/widget.cshtml' does not exist.The file '/Custom/Widgets/Page List/widget.cshtml' does not exist.The file '/Custom/Widgets/Month List/widget.cshtml' does not exist.