Visual Basic .NET’te delegeler (Delegate), bir metoda referansı kapsayan nesnelerdir ve olaylar (Events), belirli koşulların veya değişikliklerin gerçekleştiğinde abonelere bildirim mekanizmasıdır. Delegeler, davranışları (metotları) parametre olarak "geçirmeye" olanak tanırken, olaylar yayıncı-abone şablonunu uygular.
Özellikler:
Event anahtar kelimesi ile tanımlanır.AddHandler ile, abonelikten çıkma ise RemoveHandler ile gerçekleştirilir.Örnek:
' Delegenin tanımlanması Public Delegate Sub NotifyHandler(ByVal message As String) ' Olay içeren sınıf Public Class Notifier Public Event OnNotify As NotifyHandler Public Sub DoWork() RaiseEvent OnNotify("İşlem tamamlandı!") End Sub End Class ' Abone olma ve çağırma Dim n As New Notifier() AddHandler n.OnNotify, AddressOf SubNotify Sub SubNotify(ByVal msg As String) Console.WriteLine(msg) End Sub n.DoWork()
Olaylar, UI programlamasında ve iş mantığının dağıtımında özellikle faydalıdır.
RaiseEvent olaysını çağırırsam ve ona abone yoksa ne olur?
Yanlış cevap: Çalışma zamanında hata oluşur.
Doğru cevap: Hiçbir şey olmaz — eğer olayın abonesi yoksa, RaiseEvent çağrısı güvenlidir, bir istisna olmayacaktır.
Örnek:
Public Event OnUpdate() ' Hiç kimse abone olmasa bile RaiseEvent çağrısı: RaiseEvent OnUpdate() ' Geçerli ve hataya neden olmaz
Hikaye
Büyük bir masaüstü uygulamasında geliştirici olaylardan işleyicileri çıkarmadı, bu da nesnelerin bellek temizleyici tarafından serbest bırakılmamasına (bellek sızıntısı) neden oldu. Bu, bellek artışına ve birkaç saatlik çalışma sonucunda çökmesine yol açtı.
Hikaye
Genç bir uzman, delegelerin ve olayların çalışma mantığını anlamadığı için bir metodu birkaç kez ardışık olarak yanlışlıkla abone yaptı. Bu, aynı işleyicilerin çoklu çağrısına sebep oldu — kullanıcılar, tekrar eden bildirimler aldı.
Hikaye
Bir projedeRaiseEventolası çağrıldığında, bunun çalışacağı varsayıldı. Testlerde, abone yoksa hiçbir etkinin olmadığı ortaya çıktı, bu da uygulamanın iş mantığında karışıklıklara ve raporlama hatalarına yol açtı.