1. Anasayfa
  2. Nesne Tabanlı Programlama

Visual Studio C# Dersleri – C# Delegate (Temsilci) Kullanımı 2


0

Bir önceki konuda tanımladığımız ve kullandığımız delegate(temsilciler) geriye değer döndermiyordu yani tek taraflı çalışıyorlardı değişkenleri dışarıdan alıyor bir işlemde kullanıp sonucu ekranda yazdırmıştık. Şimdi geriye sonuç dönderen delegate tanımlaması ve kullanımında bakalım tanımlama biçimi aynı farklı olarak delegate(temsilci) geriye değer döndereceği için void yerine dönecek olan değişkenin türünü yazıyoruz yani

public delegate int hesap(int sayi1,sayi2);

gibi
hemen bir örnek yapalım örneğimizde dikdörtgenin alanı hesaplanacak bunu için yukarıda yazdığımız delegate tanımlamasını kullanacağız, daha sonrada aynı özelliklere sahip olan bir metot tanımlayarak program içerisinde kullanacağız. Kodlarımız aşağıdaki gibi olacak

using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication4
{
    class Program
    {
        public delegate int hesap(int sayi1, int sayi2);
        static int alan(int s1, int s2)
        {
            return s1 * s2;
        }
        static void Main(string[] args)
        {
            hesap temsilci = new hesap(alan);
            Console.WriteLine("Dikdörtgenin alanı="+temsilci(5,3));
            Console.ReadKey();
        }
    }
}

örneğimizde hesap isimli bir delegate tanımladık, aynı özelliklere sahip alan isimli bir metot tanımladık
program kısmında hesap isimli delegate kullanmak için temsilci değişkeni ile 5 ve 3 bilgilerini göndererek hesaplama işlemini gerçekleştirdik.

Şimdi birden fazla metot olsaydı nasıl olacaktı ona bakalım aynı örnek için dikdörtgenin çevreside a ve b değişkenlerini kullanıyor yani tanımlayacağımız delegate ile aynı özelliklere sahip hemen kodlarımıza bakalım büyük bir bölümü aynı farklı olan kısımları konu sonunda kısaca açıklayacağım.

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication4
{
    class Program
    {
        public delegate int hesap(int sayi1, int sayi2);
        static int alan(int s1, int s2)
        {
            return s1 * s2;
        }
        static int cevre(int s1, int s2)
        {
            return 2*s1 + 2*s2;
        }

        static void Main(string[] args)
        {
            hesap temsilci = new hesap(alan);
            temsilci += cevre;
            Delegate[] dizi = temsilci.GetInvocationList();
            Console.WriteLine("Dikdörtgenin alanı="+dizi[0].DynamicInvoke(5,3));
            Console.WriteLine("Dikdörtgenin cevresi="+dizi[1].DynamicInvoke(5, 3));
            Console.ReadKey();
        }
    }
}

Önceki örneğimizde olduğu gibi direk temsilci(5,3) yazarak programı çalıştırırsanız sadece cevre metotu çalışır çünkü çoklu metot kullanan temsilcilerde en son tanımlanan metot ilk çalıştırılıyordu.Biz tüm metotların aynı çalışmasını istediğimiz için delegate içinde tanımlı her metotda ayrı ayrı bilgileri göndermemiz gerekiyor bunun için Delegate[] dizi = temsilci.GetInvocationList(); satırı ile tanımlı metotların listesini dizi isimli değişkene aktarıp dizi[0].DynamicInvoke(5,3) ve dizi[1].DynamicInvoke(5,3) satırları ile metotlara ayrı ayrı bilgileri göndermiş olduk.. Şimdilik bukadar .. :)

Bu İçeriğe Tepkin Ne Oldu?
  • 0
    ba_ar_l_
    Başarılı
  • 0
    gayet_yi
    Gayet İyi
  • 1
    te_ekk_rler
    Teşekkürler
  • 0
    anlamad_m
    Anlamadım
  • 0
    yetersiz
    Yetersiz
İlginizi Çekebilir
Subscribe
Bildir
guest

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.

0 Yorum
Inline Feedbacks
View all comments