ProgramlamaVB.NET Geliştirici

Visual Basic .NET'te olayların (Events) ve delegelerin (Delegates) nasıl çalıştığını ve özelliklerini açıklayın. Yanlış kullanıldıklarında hangi sorunlar ortaya çıkabilir?

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

Cevap

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:

  • Olaylar sınıf içinde Event anahtar kelimesi ile tanımlanır.
  • Delegeler, bir olaya abone olabilen metotların imzasını tanımlar.
  • Abone olma 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.

Aldatmaca Sorusu

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

Konunun inceliklerinden habersizlik nedeniyle gerçek hata örnekleri


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 projede RaiseEvent olası ç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ı.