Ana içeriğe atla

( C#) Ders 8 - C# da Delegate Tanimlama ve Kullanimi

C# da Delegate Tanimlama ve Kullanimi

Delegate’ler bir metodun referansi olarak kullanilirlar. Önceki derslerimizde nesneler için referans kullanimi ile ilgili bilgiler vermistik, Örn: Personel p = new Personel(); bu örnekteki p Personel tipindeki bir nesnenin referansidir.
Delegateler de nesne referanslarina benzerler, fakat aradaki temel fark bir nesneye degil metoda referans etmeleridir.
Not: Delagateler C++ da kullanilan fonksiyon pointerlarina benzerler.
delegate in C#
Delegate kullanmadan önce,delegate’in isaret edecegi metoda ait tip(type) ve imza(signature) bilgilerine ihtiyacimiz vardir. Bir metoda ait signature bilgisi metodun dönüs tipini ve aldigim parametre tiplerini barindirir.
Örnegin Sikça kullanilan Main metodu ve signature tanimlamasi asagidaki gibidir ;
?
1
2
3
4
5
6
int Main(string [] args)
{
   
}
//Signature tanimlamasi:
int herhangibirMetodAdi(string[] args)
Main metodu disinda tanimladigimiz bir metoda ait signature bilgileri de asagidaki gibi olur.
?
1
2
3
4
5
6
int Topla(int a, int b)
{
     return a+b;
}
//Yukaridaki metot için signature tanimlamasini asagidaki gibi yapabiliriz.
int matematikselMetot(int p, int q)
Ayrica yukaridaki signature tanimlamasi ayni zamanda asagidaki metot içinde signature tanimlamasi olabilir.
?
1
2
3
4
int Cikar(int a, int b)
{
    return a-b;
}
Yukaridaki Örneklerde signature tanimlamasindaki metot adi ve parametre adlarinin önemli olmadigini anlamissinizdir. Sadece dönüs tipi ve parametre tiplerinin ayni olmasi yeterlidir.
Delegate tanimlamasi yaparken signature bilgisinin önüne delegate kelimesini eklememiz yeterlidir.
?
1
delegate int YeniDelegate(int p, int q);
Yukaridaki delegate 2 adet int tipinde parametre alan ve int bir deger döndüren herhangi bir metot için referans olarak kullanilabilir.
Tanimladigimiz delegate için siniflar için olusturdugumuz gibi asagidaki gibi bir referans nesne olusturmamiz gerekir.
?
1
YeniDelegate matematikselMetotlar;
Yukaridaki tanimladigimiz matematikselMetotlar’i artik ayni signature bilgisine sahip tüm metotlar için kullanabiliriz. Bunun için asagidaki kod blogunu kullaniriz.
?
1
matematikselMetotlar =  new YeniDelegate(Ekke);
Siniflar için nesne olustururken gibi yukaridaki örnekleri asagidaki gibi kisaca yazabiliriz.
?
1
YeniDelegate  matematikselMetotlar =  new YeniDelegate(Ekke);

Delegate üzerinden Metotu Çagirmak.

Yukaridaki örnegimizde delegatemizi Ekle fonksiyonuna isaret ettirdigimize göre artik delegate üzerinden metodumuzu asagidaki gibi çagirabiliriz.
?
1
int r = matematikselMetotlar(4,5);
Yukaridaki anlattiklarimiz toparlayacak olursak asagidaki gibi bir kodumuz olusur.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
namespace YazilimMutfagiCSharpDersleri
{
    class Test
    {
        delegate int OrnekDelegate(int a, int b);
 
        static void main()
        {
            OrnekDelegate aritmetikMetodlar = new OrnekDelegate(Topla);
            int r = aritmetikMetodlar(2, 5);
            Console.WriteLine("2 + 5 = {0}", r);
        }
        static int Topla(int a, int b)
        {
            return a + b;
        }
 
    }
}

Multicast Delegate Tanimlamak

Multicast delegateler yukaridaki örnegimizin aksine ayni anda birden fazla metodu isaret edebilir. Isaret edecegi metodlarin signature’lari ayni olmak zorundadir. Yukaridaki örnegimizi genisletecek olursan OrnekDelegate ismi ile tanimladigimiz delegateimiz hem Topla hemde Cikar fonksiyonlarina ayni anda isaret ederek tek bir seferde ile ikisini birden çagirabilir. Asagidaki örnegimiz de göreceginiz gibi += ile delegate’e yeni metot eklerken -= ilede daha önce ekledigimiz metodu çikarabiliriz. Kodlarimiz yeni hali asagidaki gibi olur;
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
 
namespace YazilimMutfagiCSharpDersleri
{
    class Test
    {
        delegate void OrnekDelegate(int a, int b);
 
        static void main()
        {
            OrnekDelegate aritmetikMetodlar;
 
            aritmetikMetodlar  = new OrnekDelegate(Topla);
            aritmetikMetodlar += new OrnekDelegate(Cikar);
             
            aritmetikMetodlar(2, 5);
 
            aritmetikMetodlar -= new OrnekDelegate(Topla);
 
            aritmetikMetodlar(3, 9);
             
        }
        static void Topla(int a, int b)
        {
            Console.WriteLine("a + b = {0}", a + b);
             
        }
        static void Cikar(int a, int b)
        {
            Console.WriteLine("a - b = {0}", a - b);
        }
    }
}

Yorumlar

Bu blogdaki popüler yayınlar

JavaScript ile Ziyaretçi Bilgileri Nasil Alinir

Bu makalemizde javascript ile web sayfamizi ziyaret eden kullanicilarin hangi site üzerinden geldigi, kullandigi tarayici bilgisi, ekran çözünürlügü ve Ip adresi gibi bilgileri nasil alacagimizi anlatacagiz. Tarayici Tipini Almak Ziyaretçinin kullandigi tarayici tipini asagidaki javascript kodu ile alabiliriz. function Tarayicitipi() {   alert(navigator.appName); } Tarayici Versiyonunu Almak function Tarayiciversiyon() {   alert(navigator.appVersion); } Ziyaretçinin Hangi Baglantiyi Kullanarak Geldigi Bilgisi (referral bilgisi) Eger ziyaretçi sayfamiza direk olarak degilde bir linki takip ederek geldi ise, geldigi adresi almak için asagidaki kodu kullaniyoruz. Bu sayede arama motorlarin gelen ziyaretçileride bulabilir ve farkli analizler için kullanabiliriz. function ReferrelBilgisi() {    alert(document.referrer); } Ekran Çözünürlügünü Almak function Cozunurluk() {    var w = screen...

GPS'li şapkayla yolunuzu bulmak çok kolay!

Bu ilginç görünümlü şapkayı giydiğinizde, yolunuzu hiç kaybetmeyeceksiniz! Gitmek istediğiniz mekanı bulmak için telefonunuzu cebinizden çıkarmanıza artık gerek yok. Çünkü bu şapka, size yolu tarif edebiliyor, üstelik yalnızca sesle. GPS destekli silindir şapka,  Cornell Üniversitesi  araştırmacıları tarafından geliştirilmiş. Prototip şu an korkunç görünüyor olabilir, ancak onu kullanmak için dil bilmenize bile gerek yok. Şapka, ses tonlarıyla yolunuzu bulmanızı sağladığından elinizi kullanmanıza da gerek kalmıyor. Bu şapkayı yakın bir zamanda satın almanız mümkün olmayacak, ancak teknolojinin navigasyon uygulamalarına uyarlanması faydalı olabilir. Teknoloji görsel ipuçlarıyla çalışmadığından, özellikle görme sorunu yaşayan kullanıcıların işine yarayabilir.

MPLS Temel Konfigürasyonu

Bu yazı içerisinde sizlerle temel “MPLS” protokolü konfigürasyonunu adım adım uygulayarak paylaşacağım. Bu adımların tamamını Huawei marka AR 2200 Serisi Router ürün ailesi üzerinde konfigüre edeceğiz. Bu konfigürasyonların kullanıldığı ve çalıştırıldığı işletim sistemi versiyonu “ V200R003C00 ” dur. Konfigürasyon adımlarının tamamı bi çok üretici ürününde de aynı şekilde ve aynı ön gereksinim ve alt yapı hazır olduğu sürece uygulanabilir ve müşteri ve/veya Servis sağlayıcıda devreye alınabilir. İşlem adımlarının uygulanırken temiz bir şekilde anlaşılması çok önemlidir. MPLS Protokolü temel konfigürasyonunu aşağıdaki topoloji üzerinden uygulayarak sizlere sunuyor olacağım. MPLS Referans Topolojimiz Öncelikli olarak tüm Router cihazlarımızda, fiziksel interface’ler ve Loopback interfac IP adres tanımlamalarını topolojimize uygun ayarlıyoruz. RouterB IP İnterface konfigürasyonu; “Router B IP Konfigürasyonu çıktısı” “Router B Üzerinde Yer Alan İnterface’lerin IP...