08 December 2016

Delegate ve Eventler

Delagate (Temsilci) bir veya birden fazla metodu program içinde temsil eden referans türü nesnedir.

Bir temsilciyi, bir metodu göstermesi için kullanmak gerekirse çalışma anında onu new yapılandırıcısıyla oluşturur ve işaret edeceği metodu ona parametre olarak verebiliriz.

Temsilci tanımı delegate anahtar kelimesiyle tanımlanır.

Tanımlama:

delegate delegate_tipi delegate_adi (dönüş_tipi değişken_adi);

Örnek:

delegate string temsilci (int t);

Delagate Kullanım Amacı:

  1. Eventleri desteklemek.
  2. Bir metodun çalışma zamanında hangi metodun ya da metotların çalıştırılacağına karar vermesi.

Temsilci tanımlama adım adım:

  1. Temsilci tanımlanır
  2. Temsilcinin temsil edebileceği metodlar tanımlanır
  3. Karar verici metod tanımlanır
  4. New yapılandırıcısı ile temsilci oluşturulur
  5. Temsilci karar verici metod ile kullanılır

Event’ler (Olaylar)

Kullanımları kontrollerdeki şartın sağlanması durumunda istenilen faaliyetin çalıştırılması işine olay denir. Olayla bağlantılı nesne, mevcut olay için bir EventHandler (Olay Yöneticisi) oluşturur. EventHandler’ın görevi bir nesnenin yaptığı işi diğer nesnelere aktarmaktır.

Örnek:
TimeOut.cs

delegate void TimeOutHandler (object sender,EventArgs e);
 class TimeOut
 {
 public event TimeOutHandler TimeOutEvent;
public void SetTimeout(int milisaniye)
 {
 Thread.Sleep(milisaniye);
 if (TimeOutEvent != null)
 {
 TimeOutEvent(this, EventArgs.Empty);
 }
 }
 }

Program.cs

class Program
 {
 static void Main(string[] args)
 {
 TimeOut t = new TimeOut();
 t.TimeOutEvent += new TimeOutHandler(t_TimeOutEvent);
 t.SetTimeout(8000);
 }
static void t_TimeOutEvent(object sender, EventArgs e)
 {
 Console.WriteLine("Event Tetiklendi....");
}
 }

Comments

  1. İyi günler yazılarınızı özenle takip ediyorum. Pratik ve püf noktalar içermesi özellikle beni bağlı kılıyor yazılarınıza lakin bu konuyu biraz daha detaylı ele alabilirmisiniz?
    İnternetteki diğer anlatımlar çok karmaşık. Burdaki anlatım güzel sade ama buda bir çok soru işareti bıraktı aklımda.. Ayrıca böyle bir blog yazdığınız ve yazmaya devam ettiğiniz için çok çok teşekkürler..