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 ;
Ş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();
}
}
}