ProgramlamaVB.NET Geliştirici

Visual Basic'teki olay mekanizmasını (Events) açıklayın ve kendi olayınızı oluşturma örneği verin. Duyuru ve abonelik sırasında dikkat edilmesi gereken noktalar nelerdir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

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:

  • Olay yalnızca ilan edildiği aynı sınıfta tetiklenebilir.
  • Eğer olayın argümanları varsa, türleri kesin olarak tanımlanmalıdır.
  • WithEvents yalnızca sınıfın alanları ve özellikleri ile kullanılabilir.
  • Bir olaya abone olduklarında, gerektiğinde abonelikten çıkmayı unutmayın (örneğin, bellek sızıntılarını önlemek için).

Kandırıcı Soru

Private eriş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.

Konu hakkında bilgi eksikliğinden kaynaklanan gerçek hata örnekleri


Hikaye

Büyük bir uygulamada olaylar Public belirleyicisi 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 Friend idi. Sonuçta, işleyici tetiklenmedi ve bu hata yalnızca entegrasyon testlerinde bulundu.


Hikaye

Programcı, olayın delegesinin imzasında sender ve e'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ı.