9 Eylül 2015

Delegates 1

Bir objenin nasıl çağrılması gerektiğini bildiren objelere delegate denir.

Bir delegate tipi çağrıldığı metodun tipiyle yanı olmalıdır Yani metdoun döndüreceği değer ve parametreleri aynı olmalıdır.
Aşağıdaki örneği inceleyelim

delegate int Donusturucu(int x);

Burada ki örneği incelersek
  • delegate nesnemizi tanımlarken sadece başına delegate eklememiz yeterlidir.
  • delegate ten sonra döndürdüğü(return) metodun tipini int olarak tanımladık.
  • Sadece bir tek int x parametresi tanımladık.
  • Delegateden sonra metodda olduğu gibi tanımlanan bölge yani {} oluşturulmadı. Bu açıdan bakınca interface ile benzerlik gösteriyor diyebiliriz.
  • Donusturucu metodumuz int döndüren ve int parametreli tüm metodlarla artık uyumludur. Örneğin aşağıdaki metdola ; 
static int Kare(int x){return x*x;}

 Şimdi Kare metodumuzu  Donusturucu delegatemize atamak için aşağıdaki iki yöntemide kullanılabilir.

Donusturucu d=Kare;
Donusturucu d=new Donusturucu(Kare) ;

Oluşturduğumuz delegatei çalıştırmak için aşağıdaki iki yöntemide kullanabiliriz. Bunların birbirileriyle farkı yoktur.

int cevap=d(3);
int cevap=d.Invoke(3);

yazarsak cevap 9 olacaktır.

Örneğin tamamı aşağıdaki gibidir.

using System;

namespace Delegates
{
    delegate int Donusturucu(int x);//Delegate tanımlandı
    class Program
    {
        static int Kare(int x)
        {
            return x * x;
        }
        static void Main(string[] args)
        {
            //Donusturucu d = new Donusturucu(Kare);//Delegate örneği oluşturuldu
            Donusturucu d = Kare;//Delegate örneği oluşturuldu. Bir üst satır ile alt satır aynı örneği faklı şekilde ifade eder.

            int cevap = d.Invoke(3);//9
            //int cevap = d(3);//9
         

            Console.Write(cevap);
            Console.ReadKey();
        }
    }
}