5.00 / 1 oy

C# Delegate Nedir? C# Delegate Kullanımı ve Örnekleri

Delegate, C# programlama dili içinde anlaşılmasında güçlük çekilen ve ileri seviye olarak değerlendirebileceğimiz bir konu. Ancak özellikle kendi event'lerimizi yazabilmek için gerekli bir konu olduğu için örneklerle birlikte delegate'leri de anlatmaya çalışacağım.

Delegate, C++ programlama dilinde function pointer'ın C# karşılığı olarak da düşünülebilir. Bir metoda kendi ismini kullanmadan (delegate kelimesi buradan gelir, metod ismi bir nevi delege edilir) erişim imkanı tanır. Ayrıca Event oluşturmak için de gerekli bir işlemdir.

Örnek 1: Aşağıdaki örnekte toplamHesapla değişkeni Topla metodunu (aynı imzaya sahip olarak) işaret etmektedir, böylece Topla metodu doğrudan çağırılmadan kullanılabilmektedir. IslemYap dediğimizde herhangi bir işlem olabilir, bu yüzden aynı imzaya sahip olma şartı ile metodların ve değişkenlerin sayısı artırılabilir.

public delegate int IslemYap(int sayi1, int sayi2);

public static int Topla(int a, int b)
{
    System.Console.WriteLine("{0}+{1}={2}", a, b, (a+b));
    return a+b;
}

public static int Cikart(int a, int b)
{
    System.Console.WriteLine("{0}-{1}={2}", a, b, (a-b));
    return a-b;
}

static void Main(string[] args)
{
    IslemYap toplamHesapla = Topla;
    toplamHesapla(2,3);
    //Çıktı:2+3=5
    
    IslemYap farkHesapla = Cikart;
    farkHesapla(5,1);
    //Çıktı:5-1=4
}

 

Delegate'lere birden fazla pointer ekleyebiliriz. Bu tür delegate'lere multicast delegate adı verilir.

Not: Multicast kelimesi "çok noktaya yayan" anlamına gelmektedir.

 

Örnek 2: 1. Örneği tek bir değişken ile multicast delegate olarak güncelleyelim.

IslemYap toplamHesapla = Topla;
IslemYap farkHesapla = Cikart;

IslemYap hesapla = toplamHesapla + farkHesapla;
hesapla(7,2);

Çıktı:

7+2=9
7-2=5

2. örnekten de görebileceğimiz gibi bir değişken ile birden fazla delegate değişkeni + operatörü ile birlikte kullanılabilmektedir, böylece birden fazla işlemi tek bir delegate ile yapabildik.

 

Örnek 3: Carp isimli bir metod tanımlayarak içerisinde iki sayının çarpımını yazdıran ve döndüren bir kod yazalım, sonrada multicast delegate'e bu metodu da ekleyelim.

public delegate int IslemYap(int sayi1, int sayi2);

public static int Topla(int a, int b)
{
    System.Console.WriteLine("{0}+{1}={2}", a, b, (a+b));
    return a+b;
}

public static int Cikart(int a, int b)
{
    System.Console.WriteLine("{0}-{1}={2}", a, b, (a-b));
    return a-b;
}

public static int Carp(int a, int b)
{
    System.Console.WriteLine("{0}*{1}={2}", a, b, (a*b));
    return a*b;
}

static void Main(string[] args)
{
    IslemYap toplamHesapla = Topla;
    IslemYap farkHesapla = Cikart;

    IslemYap hesapla = toplamHesapla + farkHesapla;
    hesapla += Carp;
    hesapla(7,2);
}

Çıktı:

7+2=9
7-2=5
7*2=14

Not: += operatörü ile multicast delegate değişkenine metod pointer ekleyebildiğimiz gibi -= operatörü ile çıkartabiliriz de.

Delegate'lerin asıl kullanışlı oldukları yerler event'ler ve trigger işlemleri olduğu için bu yazıyı burada kesiyorum, C# event'leri yazısını yazdığımda delegate'lerin daha büyük faydalarını da örneklerle paylaşmıl olacağım.

 

Önceki ilgili bazı diğer yazılarım için;

bkz: C# Main metodundaki string[] args nedir?

bkz: C# Nullable Kullanımı ve Örnekleri

bkz: C# DateTime Kullanımı ve Örnekleri

bkz: C# Random Sınıfı Kullanımı ve Örnekleri

bkz: C# Enum Nedir? Kullanımı ve Örnekleri

bkz: C# Struct (Yapı) Nedir?

mbologlu

19.05.2021 00:29

Bu soru henüz yanıtlanmamış.

Bu soruya sadece kayıtlı kullanıcılar yanıt yazabilirler. Yanıt yazmak için lütfen giriş yapınız.

Reitix
C# Delegate Nedir? C# Delegate Kullanımı ve Örnekleri

İnternet sitemizdeki deneyiminizi iyileştirmek için çerezler kullanıyoruz. Bu siteye giriş yaparak çerez kullanımını kabul etmiş sayılıyorsunuz. Daha fazla bilgi.