ProgrammierungVB.NET Entwickler

Beschreiben Sie die Ereignismechanik (Events) in Visual Basic und geben Sie ein Beispiel für die Erstellung eines eigenen Ereignisses. Worauf sollte man bei der Deklaration und der Anmeldung achten?

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort

In Visual Basic ermöglichen Ereignisse (Events) einem Objekt, andere Komponenten der Anwendung über aufgetretene Änderungen zu benachrichtigen. Ein Ereignis wird mit dem Schlüsselwort Event deklariert. Es wird mit der Methode RaiseEvent (VB.NET) oder Raise (VB6) ausgelöst, und Komponenten können sich darauf anmelden (Handles/WithEvents).

Beispiel VB.NET:

Public Class Worker Public Event WorkCompleted As EventHandler Public Sub DoWork() ' ...eine Art Arbeit 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("Arbeit abgeschlossen!") End Sub End Class

Wichtige Punkte:

  • Ein Ereignis kann nur in derselben Klasse ausgelöst werden, in der es deklariert wurde
  • Wenn ein Ereignis Argumente hat, müssen die Typen streng definiert sein
  • WithEvents kann nur mit Feldern und Eigenschaften der Klasse verwendet werden
  • Vergessen Sie nicht, sich nach Bedarf abzumelden, um Speicherlecks zu vermeiden

Trickfrage

Kann man ein Ereignis mit dem Zugriffsmodifizierer Private deklarieren und sich aus einer anderen Klasse darauf anmelden?

Antwort: Nein, der Modifizierer Private beschränkt den Sichtbarkeitsbereich des Ereignisses nur auf die Klasse, in der es deklariert wurde. Andere Klassen können es nicht sehen und sich daher nicht anmelden.

Beispiele realer Fehler durch Unkenntnis der Feinheiten des Themas


Geschichte

In einer großen Anwendung wurden Ereignisse mit dem Modifizierer Public erstellt, aber nirgendwo ausdrücklich davon abgemeldet. Bei längerem Betrieb der Anwendung führte dies zu Speicherlecks, da die Handler auf nicht benötigte Objekte verwiesen.


Geschichte

Bei der Migration von VB6 zu VB.NET erwartete der Entwickler, dass das Ereignis in allen Modulen verfügbar ist, aber standardmäßig war das Ereignis Friend. Infolgedessen wurde der Handler nicht ausgelöst, und dieser Fehler wurde erst bei den Integrationstests entdeckt.


Geschichte

Ein Programmierer machte einen Fehler in der Signatur des Delegaten des Ereignisses - er vertauschte sender und e. Es gab keine Fehlermeldung (der Event-Handler wurde einfach nicht aufgerufen), und die benötigte Geschäftslogik wurde bis zur endgültigen Abnahme verborgen übergangen.