C# Delegate Nedir?

Buse Yalçın
3 min readApr 9, 2021

--

Merhabalar :) Bu yazımda sizlere C# delegates’lerden biraz bahsetmek, vizelerin ortasındayken de notlarımı sizler ile paylaşmak istedim. Haydi başlayalım o halde..👩‍💻

Delegate, bir nesnenin programda karşılaştığı bir olay sonrasında gorevini farklı bir nesneye devredebilmesini sağlar. Bir nesne gerçekleştirmek istediği görevi devreder (delegator), bir diğer nesne de o görevi devralarak gerçekleştirir (delegate). Nesneler arasındaki bu görev devri Delegate olarak adlandırılır.

C# içerisinde yer alan delegate yapısı genellikle bellekteki metotların bir olay sonucu çalıştırılması için kullanılır.

Örneğin veritabanından bir kayıt silindiğinde bir metodun çalıştırılması, dosya silindiğinde bir metodun çalıştırılması delegate ile yapılır.

Genel tanım aşağıdaki gibidir.

delegate <Metot-Dönüş-Değeri> <Temsilci-Adı>(<Metot-Parametresi>);

Yukarıda tanımlanan ilk metoda erişmek için aşağıdaki gibi bir delegate tanımı yapılması gerekir.

// Metot imzası temsil ediliyor.
delegate void Temsilci(int sayi1, double sayi2);

İkinci metoda erişmek için ise aşağıdaki gibi tanımlama yapılması gerekiyor.

delegate void Temsilci2(double s1, int s2);

Not: Parametre isimlerinin bir önemi yoktur sadece veri türlerinin eşleşmesi yeterli olacaktır.

Metotlara erişim aşağıdaki gibidir.

using System;class Program {
delegate void Temsilci(int s1, double s2);
static void Main() {
Temsilci Metot = Topla; // Temsilci Metot = new Temsilci(Topla);
Metot(7, 77);
}
static void Topla(int sayi1, double sayi2) {
Console.WriteLine("Sayı1: {0} - Sayı2: {1} - Sonuç: {2}", sayi1, sayi2, sayi1 + sayi2);
}
}

Burada ki kodumuzdan basit bir dil ile anlatacak olursam;

  • Temsilci adı ile oluşturduğumuz delegate’mizin dönüş tipi void ve türlerimiz ise int, double şeklinde.
  • O halde Topla metodumuzun da dönüş tipi void, türleri ise sırası ile int, double şeklinde olmalıdır.
  • Yani imzaları aynı olmak zorundadır.
Özel Delegate

Özel delegate oluşturma işlemi resimde görüldüğü gibidir. Ve parametrelerimiz, dönüş tiplerimiz sırası ile aynı olmaktadır.

Ekran çıktımız ise;

5

olacaktır.

**************************

****************************

Action Delegate

Action delegate oluşturma işlemi de solda görüldüğü gibidir. Burada action delegate iki giriş parametresi içerir.(int,int şeklinde)

Burada da myfun yöntemini doğrudan action delegate atamış oluruz.

Ekran çıktımız ;

15 olacaktır.

***************************

****************************

Çoklu Delegate (Multicasting Delegate)

Delegenin çoklu yayını, normal delegenin bir uzantısıdır (bazen Tek Oyunculu Delege olarak adlandırılır). Kullanıcının tek bir çağrıda birden fazla yöntemi işaret etmesine yardımcı olur.

Özellikleri:

  • Temsilciler birleştirilir ve bir temsilci çağırdığınızda, tam bir yöntem listesi çağrılır.
  • Tüm yöntemler İlk Giren İlk Çıkar (FIFO) sırasına göre çağrılır.
  • Yöntemleri temsilcilere eklemek için ‘+’ veya ‘+ =’ Operatör kullanılır.
  • ‘-’ veya ‘- =’ Operatör, yöntemleri temsilciler listesinden kaldırmak için kullanılır.

Function Delegate;

Bir Func, yerleşik bir genel tip temsilcisidir. Bu temsilci, sizi yukarıdaki örnekte gösterildiği gibi özel bir temsilci belirlemekten kurtarır ve programınızı daha okunaklı ve optimize edilmiş hale getirir. Bildiğimiz gibi, Func genel bir temsilci olduğundan Sistem ad alanı altında tanımlanmıştır . İçerisinde minimum 0 ve maksimum 16 giriş parametresi içerebilir ve yalnızca bir çıkış parametresi içerebilir . Işlev temsilci son parametre dönüş türü olarak kabul edilir ve sonuç için kullanılan takım parametredir . Func, genellikle bir değer döndürecek yöntemler için kullanılır veya başka bir deyişle, değer döndürme yöntemleri için Func delegate kullanılır. Aynı türde veya farklı türde parametreler de içerebilir.

Burada, yalnızca tek bir satırda bir temsilci oluşturmak için bir Func delegesi kullanıyoruz. Bu Func temsilcisi, dört giriş parametresi ve bir çıkış parametresi içerir.

Burada ekran çıktımız 1000000 olur.

**************************

****************************

Anlatacaklarım şimdilik bu kadar. Yanlışlarım var ise affola :)

Sağlıklı günler dilerim, birdaha ki yazımda görüşmek üzere hoşçakalın :)

Eğer sizlere bir şeyler katabildiysem sol taraftan 👏butonuna basarak destek olabilirsiniz.

(Üst üste basarak da daha çok destek olabilirsiniz tabi ki 👏👏 👏👏👏👏)

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Buse Yalçın
Buse Yalçın

Written by Buse Yalçın

Computer Engineer ⚪️ Backend Developer ⚪️ Research freak 💃🏼 GitHub: https://github.com/Buse5 Website: buse5.github.io

No responses yet

Write a response