TEMSİLCİLER (DELEGATES)
Örnek 2:
Örnek 3:
- Değişkenler nasıl ki bellekte bir bölgede bulunuyorsa metotlarda belleğin bir bölgesindedir. Çeşitli programlama dillerinde metot adreslerine de erişmek mümkündür.
- Adres kavramı C# ta programcılardan gizlenmiştir. Bunun yerine metotların bir nevi adreslerini tutan yeni veri modeli geliştirilmiştir. İşte bu veri tipi modelini temsil eden veri yapısı delegates tir.
- Temsilciler delegate anahtar sözcüğü kullanılarak bildirilir.
- En genel şekilde kullanımları şu şekildedir.
delegate GeridDonusDegeri temsilci (parametreler);
public delegate void komutlar(string str);
delegate int temsilci(); - “Temsilci” bir delegate türünün bildirimidir. Yani temsilci nesneleri tanımlamak için new anahtar sözcüğü kullanılır.
- Temsilcilerin kullanılmasının amacı derleme zamanında belli olmayan metot çağrımlarını çalışma zamanında belirlemektir. Bir diğer amacı ise farklı işler yapan birden fazla metotları aynı anda çağırmamıza yarar.
- Genelde temsicilerin sonuna Handler ifadesi konur. MetotTemsilcimHandler gibi..
- Delegate kullanılması metodları daha rahat kontrol etmemizi sağlayacak ve uygulamamızın performansını artıracaktır.
Örnek 1:
namespace delegate1
{
class Program
{
public delegate void MetotTanimlaHandler();
public static void metot1()
{
Console.WriteLine("Ben Metot1");
}
public static void metot2()
{
Console.WriteLine("Ben Metot2");
}
public static void Main(string[] args)
{
MetotTanimlaHandler temsilci = new MetotTanimlaHandler(metot1);
temsilci();
temsilci = new MetotTanimlaHandler(metot2);
temsilci();
Console.ReadKey();
}
}
}
Örnek 2:
namespace delegate2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private delegate void MetotTemsilcimHandler(string s);
private MetotTemsilcimHandler temsilci;
private void MetinYaz1(string text)
{
label1.Text = text;
}
private void MetinYaz2(string text)
{
label1.Text = "unchecked -" + text;
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
temsilci(textBox1.Text);
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked == true)
{
temsilci = MetinYaz1;
}
else
{
temsilci = MetinYaz2;
}
}
}
}
Örnek 3:
//Hesaplama adında bir delegate tanımı yapıldı.
//int tipinde bir parametre bekliyor
public delegate decimal Hesaplama(int adet);
static void Main(string[] args)
{
Hesaplama del = Fiyat;
Console.WriteLine("KDV Hariç 5 Ürün" + " Fiyatı: {0}", del(5));
del = KDVFiyat; //delegate değiştiriliyor
Console.WriteLine("KDV Dahil 5 Ürün" + " Fiyatı: {0}", del(5));
Console.ReadLine();
}
static decimal Fiyat(int sayi)
{
//Fiyat 10.5 kabul edilerek hesaplandı. (KDV Hariç)
return sayi * 10.5m;
}
static decimal KDVFiyat(int sayi)
{
decimal kdvharicfiyat = sayi * 10.5m;
//KDV %18 düşünüldü
return kdvharicfiyat + kdvharicfiyat * 0.18m;
}
//Hesaplama adında bir delegate tanımı yapıldı. //int tipinde bir parametre bekliyor public delegate decimal Hesaplama(int adet); static void Main(string[] args) { Hesaplama del = Fiyat; Console.WriteLine("KDV Hariç 5 Ürün" + " Fiyatı: {0}", del(5)); del = KDVFiyat; //delegate değiştiriliyor Console.WriteLine("KDV Dahil 5 Ürün" + " Fiyatı: {0}", del(5)); Console.ReadLine(); } static decimal Fiyat(int sayi) { //Fiyat 10.5 kabul edilerek hesaplandı. (KDV Hariç) return sayi * 10.5m; } static decimal KDVFiyat(int sayi) { decimal kdvharicfiyat = sayi * 10.5m; //KDV %18 düşünüldü return kdvharicfiyat + kdvharicfiyat * 0.18m; }