Csharp Delegate (Temsilci ) Kullanımı
Delegate ler c# programlama dili kavramlarındandır. Delegate ler kısaca temsilcilerdir. Yani programımızdaki metodları gösteren referanslardır.
Delegate kullanmak için ilk olarak, class dışında namespace içinde tanımını yaparız.
Delegateler bulundukları namespace içindeki metodlara referans olurlar.
Delegate imizi nasıl tanımladıysak, sadece aynı arayüzdeki metodlara referans olabiliriz. Yani girdi ve return tipleri ve sayıları aynı olmak zorundadır.
Kullanmak için new sözcüğü ile yeni bir delegate oluşturur ve hangi sınıftaki metodu kullanacak isek, sınıfın nesnesi ile metodu gösteririz.
Örnek bir kod şu şekildedir.
Program.cs
Test.cs
Burada Add ve Sub metodları, test classı içinde add ve sub olarak kullanılmıştır.
Bunlara da Göz Atmak İsteyebilirsiniz.
<<< Önceki: Kırmızı – Siyah Ağaç Yapıları ( Red – Black Trees)
Sonraki: Csharp Property Nedir, Nasıl Kullanılır? >>>
Peki bu kavramı kullanmanın bize getirdiği avantajlar nelerdir? Yani
mc.add(10,6)
ile
Calculate add = new Calculate(mc.Add);
add(10,6);
arasındaki fark nedir? İkisi de aynı işi yapıyor ama biri iki satır, diğeri bir satır. Neden iki satır yazma zahmetine katlanayım? 🙂
Bu yazımda aslında tam anlamıyla delegate lerin ne işe yaradığına dair bilgi bulunmuyor. Şöyle açıklayayım. Delegate leri metodlara pointer gibi düşünebiliriz. Örnek vermek gerekirse, örneğin, bir olay olduğunda mesela kullanıcı bir butona tıkladığında. Siz 3 farklı classın 3 farklı metodunu çağırmak istiyorsunuz. Çünkü o nesnelere butona tıklandığına dair haber iletmeniz gerekiyor.
Çözüm olarak ya her birinin metodunu tek tek çağıracaksınız, yada delegate kullanıp tek bir komutlar hepsinin metodlarını tek hamlede çağıracaksınız.
Kod olarak örnek vermek gerekirse (daha sonra bu kodları yeni bir yazıma taşıyacağım)
Test.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace DelegateTest
{
public class Test
{
static void Main(string[] args)
{
//Diğer class taki fonksiyonları yeniden adlandırıyor
//Girdi ve return tipleri değerleri aynı olmak zorundadır.
MyClass mc = new MyClass();
MyClass2 mc2 = new MyClass2();
Calculate add = new Calculate(mc.Add);
add += new Calculate(mc.Sub);
add += new Calculate(mc2.Mul);
add(7, 3);
}
}
}
Program.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace DelegateTest
{
public delegate int Calculate(int v1, int v2);
public class MyClass
{
public int Add(int v1, int v2)
{
Console.WriteLine("Sum of them is: {0}", v1 + v2);
return v1 + v2;
}
public int Sub(int v1, int v2)
{
Console.WriteLine("Sub of them is: {0}", v1 - v2);
return v1 - v2;
}
}
class MyClass2
{
public int Mul(int v1, int v2)
{
Console.WriteLine("Mul of them is: {0}", v1 * v2);
return v1 * v2;
}
}
}
Görüldüğü gibi sadece add(7,3) metodunu çağırarak 3 tane metod çağırmış oldum. Delegateler eventler ile birlikte sıkça kullanılır. Bunlara daha sonraki derslerimde değineceğim
Hmm şimdi anladım. Teşekkür ederim ayrıntılı açıklama için…
Büyüksün gürcan başgan 😀
Yorum Bırakın!
En Son Yazılanlar
Codeigniter Dersleri
Kategoriler
Teknoloji Haberleri
Android Dersleri
Arşiv
Sitemizin QR Kodu
Yeniliklerden İlk Sizin Haberiniz Olsun
KodMerkezi.Net Facebookta
En Çok Okunanlar
En Son Aranan Kelimeler
En Çok Oy Alanlar
Etiket Bulutu
İlginizi Çekecek Siteler
Arşiv
Yönetim
En Son Yapılan Yorumlar
En Çok Okunanlar