Anasayfa » Csharp

Csharp Delegate (Temsilci ) Kullanımı

3 Aralık 2011 2.249 kez okundu 4 yorum
1 Star2 Stars3 Stars4 Stars5 Stars (Henüz hiç oy kullanılmadı. İlk oyu siz verin.)
Loading ... Loading ...

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.

?View Code CSHARP
public delegate int Calculate(int v1,int v2);

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.

?View Code CSHARP
MyClass mc = new MyClass();
Calculate add = new Calculate(mc.Add);

Örnek bir kod şu şekildedir.

Program.cs

?View Code CSHARP
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)
        {
            return v1 + v2;
        }
        public int Sub(int v1, int v2)
        {
            return v1 - v2;
        }
 
    }
    class MyClass2
    {
        public int Add(int v1, int v2)
        {
            return v1 * v2;
        }
    }
}

Test.cs

?View Code CSHARP
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);
            Calculate sub = new Calculate(mc.Sub);
            Calculate add2 = new Calculate(mc2.Add);
 
            Console.WriteLine("add :" + add(10, 6));
            Console.WriteLine("add :" + add2(10, 6));
            Console.WriteLine("sub :" + sub(10, 6));
        }
	}
}

Burada Add ve Sub metodları, test classı içinde add ve sub olarak kullanılmıştır.

<<< Önceki:

Sonraki: >>>


Facebookta Paylaş

4 yorum »

  • Şeref AKYÜZ dedi ki:

    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? 🙂

  • admin dedi ki:

    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

  • Şeref AKYÜZ dedi ki:

    Hmm şimdi anladım. Teşekkür ederim ayrıntılı açıklama için…

  • Melike Aytürk dedi ki:

    Büyüksün gürcan başgan 😀

Yorum Bırakın!

Yorum yaz, yada kendi sitende trackback (Geri besleme) olarak ekle. Ayrıca RSS ile bu konuya üye olabilirsin. .

Nazik olun. Temiz tutun. Konu dışına çıkmayın. Spam yaratmayın.

Bu tagları kullanabilirsiniz:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Bloğumuz gavatarı desteklemektedir. Kendi gavatarınızı edinmek için lütfen Gravatar a üye olun.