using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace temsilciler
{
class Program
{
static void Main(string[] args)
{
string islem=boyama();
Console.WriteLine(islem);
}
static string boyama() //bir method
{
return "Boyama yapıldı";
}
}
}
Burada islem alanı bir method unadresinini tutmaktadır. Bu adres çalışma anında belirlenir.
Şimdi aşağıdaki gibi program parçasını daha güçlü hale getirerek yazalım. 1
paragraf boşluk bırak.
using System;
namespace temsilciler
{
class Program
{
static void Main(string[] args)
{
Araba arabam1=new Araba();
boyama(arabam1); //çağrılıyor.
}
static void boyama(Araba arabam) //bir method
{
Console.WriteLine(arabam.ToString() + "Boyama yapıldı");
}
static void cilalama(Araba arabam)
{
Console.WriteLine(arabam.ToString() + "cilalama işi tamam");
}
static void hizTesti(Araba arabam)
{
Console.WriteLine(arabam.ToString() + "Hiz Testi yapıldı");
}
}
class Araba
{
public override string ToString()
{
return "09890890 nolu araba ";
}
}
}
Şimdi bu kod üzerinde düzenlemeler yapalım..
using System;
namespace temsilciler
{
class Program
{
delegate void islemler(Araba arabam);
//delagate
static void Main(string[] args)
{
Araba arabam1=new Araba();
//string islem=boyama(arabam1);
islemler islem=new islemler(boyama);//moethodları yazarken bir değer gibi düşünldüğünden parantez yazılmaz.
islem+=cilalama;
islem+=hizTesti;
islem(arabam1);//çağrılıyor
Console.WriteLine("\r\n");
islem-=hizTesti; //2. çağırma işleminde hızTesti yöntemini çıkardık.
islem(arabam1); //çağrılıyor.
}
static void boyama(Araba arabam) //bir method
{
Console.WriteLine(arabam.ToString() + "Boyama yapıldı");
}
static void cilalama(Araba arabam)
{
Console.WriteLine(arabam.ToString() + "cilalama işi tamam");
}
static void hizTesti(Araba arabam)
{
Console.WriteLine(arabam.ToString() + "Hiz Testi yapıldı");
}
}
class Araba
{
public override string ToString()
{
return "09890890 nolu araba ";
}
}
}
Burada dikkat edilmesi gereken kurallara ve notları yazalım..
Temsillerin temsil ettikleri methodlar aynı türde ve aynı parametrelere ship olmalıdır.
Temsilcilere eklenen methodlar eklenme sırasına göre çalışırlar.
Temsilcilere method eklenirken parantez yazılmaz. islem+=cilalama; gibi
Temsilci nesnesini tanımalmak için new Islemler(method_Adi) gibi tanımlama yapmak gerekir. Burada Islemler temsilcisinin delegate türünde olduğunu ve imzasını daha önceden belirtmek gerekir.
delegate void islemler(Araba arabam); satırında olduğu gibi. parametre ve geri dönüş değeri temsilcinin imzasıdır diyebiliriz.
d
d