C# - Temsilciler (DELEGATES) ve Olaylar (EVENTS)

TEMSİLCİLER (DELEGATES) 
  • Değişkenler nasıl ki bellekte bir bölgede bulunuyorsa metotlarda belleğin bir bölgesindedir. Çeşitli programlama dillerinde metot adreslerine de erişmek mümkündür. 
  • Adres kavramı C# ta programcılardan gizlenmiştir. Bunun yerine metotların bir nevi adreslerini tutan yeni veri modeli geliştirilmiştir. İşte bu veri tipi modelini temsil eden veri yapısı delegates tir.
  • Temsilciler delegate anahtar sözcüğü kullanılarak bildirilir.
  • En genel şekilde kullanımları şu şekildedir.
    delegate GeridDonusDegeri temsilci (parametreler);
    public delegate void komutlar(string str);
    delegate int temsilci();
  • “Temsilci” bir delegate türünün bildirimidir. Yani temsilci nesneleri tanımlamak için new anahtar sözcüğü kullanılır.
  • Temsilcilerin kullanılmasının amacı derleme zamanında belli olmayan metot çağrımlarını çalışma zamanında belirlemektir. Bir diğer amacı ise farklı işler yapan birden fazla metotları aynı anda çağırmamıza yarar.
  • Genelde temsicilerin sonuna Handler ifadesi konur. MetotTemsilcimHandler gibi.. 
  • Delegate kullanılması metodları daha rahat kontrol etmemizi sağlayacak ve uygulamamızın performansını artıracaktır.
Örnek 1: 
namespace delegate1
{
    class Program
    {
        public delegate void MetotTanimlaHandler();
        

        public static void metot1()
        {
           Console.WriteLine("Ben Metot1");
        }

        public static void metot2()
        {
            Console.WriteLine("Ben Metot2");
        }

        public static void Main(string[] args)
        {
            MetotTanimlaHandler temsilci = new MetotTanimlaHandler(metot1);
            temsilci();

            temsilci = new MetotTanimlaHandler(metot2);
            temsilci();
                  
            Console.ReadKey();

        }
    }
}

Örnek 2:
namespace delegate2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private delegate void MetotTemsilcimHandler(string s);
        private MetotTemsilcimHandler temsilci;
        private void MetinYaz1(string text)
        {
            label1.Text = text;
        } 
        
        private void MetinYaz2(string text)
        {
            label1.Text = "unchecked -" + text; 
        }

        private void Form1_Load(object sender, EventArgs e)
        {
           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            temsilci(textBox1.Text);
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
           if (checkBox1.Checked == true)
            {
                temsilci = MetinYaz1;
            }
            else
            {
                temsilci = MetinYaz2;
            }
        }
    }
}

Örnek 3:
//Hesaplama adında bir delegate tanımı yapıldı.
//int tipinde bir parametre bekliyor
public delegate decimal Hesaplama(int adet);
static void Main(string[] args)
{
    Hesaplama del = Fiyat;
    Console.WriteLine("KDV Hariç 5 Ürün" + " Fiyatı: {0}", del(5));
    
    del = KDVFiyat;  //delegate değiştiriliyor
    Console.WriteLine("KDV Dahil 5 Ürün" + " Fiyatı: {0}", del(5));
    
    Console.ReadLine();
}

static decimal Fiyat(int sayi)
{
    //Fiyat 10.5 kabul edilerek hesaplandı. (KDV Hariç)
    return sayi * 10.5m;
}

static decimal KDVFiyat(int sayi)
{
    decimal kdvharicfiyat = sayi * 10.5m;
    //KDV %18 düşünüldü
    return kdvharicfiyat + kdvharicfiyat * 0.18m;
}
//Hesaplama adında bir delegate tanımı yapıldı.
//int tipinde bir parametre bekliyor
public delegate decimal Hesaplama(int adet);
static void Main(string[] args)
{
    Hesaplama del = Fiyat;
    Console.WriteLine("KDV Hariç 5 Ürün" + " Fiyatı: {0}", del(5));
    
    del = KDVFiyat;  //delegate değiştiriliyor
    Console.WriteLine("KDV Dahil 5 Ürün" + " Fiyatı: {0}", del(5));
    
    Console.ReadLine();
}

static decimal Fiyat(int sayi)
{
    //Fiyat 10.5 kabul edilerek hesaplandı. (KDV Hariç)
    return sayi * 10.5m;
}

static decimal KDVFiyat(int sayi)
{
    decimal kdvharicfiyat = sayi * 10.5m;
    //KDV %18 düşünüldü
    return kdvharicfiyat + kdvharicfiyat * 0.18m;
}

Ad

Arduino Autocad Bilim-Teknoloji Biyomedikal Sistemler C-Programlama C# C# Programlama Diferansiyel Denklemler Dijital Kontrol Sistemleri Elektrik Devreleri 1 Elektrik Devreleri 2 Elektrik Makineleri 1 Elektrik Makineleri 2 Elektrik Tesislerinde Koruma Elektromantetik Alan Teorisi Elektromantetik Dalga Teorisi Elektronik 1 Elektronik 2 Elektronik-Devreler EmguCV Genel Fizik Genel Kimya Genel Matematik Gömülü Linux Güç Elektroniği Haberleşme Sistemleri İşaret ve Sistemler Lineer-Cebir Lojik Devreler Malzeme Bilimi MATLAB Mikroişlemciler Olasılık ve İstatistik Otomatik Kontrol Sistemleri PLC-Otomasyon Proje Yönetimi ve Girişimcilik Raspberry Pi Sayısal Analiz Sayısal İşaret İşleme Teknik-Kutuphane Termodinamik Yüksek Gerilim Tekniği
false
ltr
item
Çağlar GÜL: C# - Temsilciler (DELEGATES) ve Olaylar (EVENTS)
C# - Temsilciler (DELEGATES) ve Olaylar (EVENTS)
Çağlar GÜL
https://elektronikafa.blogspot.com/2017/01/c-temsilciler-delegates-ve-olaylar.html
https://elektronikafa.blogspot.com/
http://elektronikafa.blogspot.com/
http://elektronikafa.blogspot.com/2017/01/c-temsilciler-delegates-ve-olaylar.html
true
871250089272898028
UTF-8
Not found any posts Not found any related posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU Tag ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Contents See also related Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS CONTENT IS PREMIUM Please share to unlock Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy