Visual Basic'te olaylar (Events), bir nesnenin uygulamadaki diğer bileşenleri meydana gelen değişikliklerden haberdar etmesini sağlar. Olay, Event anahtar kelimesi kullanılarak beyan edilir. RaiseEvent (VB.NET) veya Raise (VB6) metodu ile tetiklenir ve bileşenler ona abone olabilir (Handles/WithEvents).
VB.NET Örneği:
Public Class Worker Public Event WorkCompleted As EventHandler Public Sub DoWork() ' ...bir iş yapılır RaiseEvent WorkCompleted(Me, EventArgs.Empty) End Sub End Class Public Class Manager Private WithEvents w As Worker Public Sub New() w = New Worker() End Sub Private Sub w_WorkCompleted(sender As Object, e As EventArgs) Handles w.WorkCompleted Console.WriteLine("İş tamamlandı!") End Sub End Class
Önemli Noktalar:
WithEvents yalnızca sınıfın alanları ve özellikleri ile kullanılabilir.
Privateerişim belirleyicisi ile bir olayı ilan etmek ve başka bir sınıftan buna abone olmak mümkün mü?
Cevap: Hayır, Private belirleyicisi, olayın görünürlük alanını yalnızca onu ilan eden sınıf ile sınırlar. Diğer sınıflar bunu göremez ve bu nedenle abone olamazlar.
Hikaye
Büyük bir uygulamada olaylar
Publicbelirleyicisi ile oluşturulmuş ama hiçbir yerde açıkça abonelikten çıkılmamıştır. Uygulamanın uzun süre çalışması sırasında, işlemler gereksiz nesnelere referanslar verdiği için bellek sızıntılarına neden olmuştur.
Hikaye
VB6'dan VB.NET'e geçişte geliştirici, olayın tüm modüllerde erişilebilir olmasını bekliyordu, ancak varsayılan olarak olay
Friendidi. Sonuçta, işleyici tetiklenmedi ve bu hata yalnızca entegrasyon testlerinde bulundu.
Hikaye
Programcı, olayın delegesinin imzasında
sendervee'yi yer değiştirdi. Hiçbir hata mesajı yoktu (olay işleyici sadece çağrılmadı) ve gerekli iş mantığı gizlice yarı final sürümüne kadar atlandı.