2017-04-17 3 views
0

Ich ging durch Ereignisse in Vb.net und ich fand, dass sie wirklich ein erstaunliches Feature..aber noch verwirrt sind, wie man sie effektiv verwendet.Unterfunktionen vs Ereignis, was ist der Unterschied?

Der wirkliche Zweifel ist, dass die Funktionen und sub eine wirksame Alternative für Ereignisse sein könnten. Was auch immer ich mit Ereignissen mache, ich kann es über Funktionen und Methoden schaffen. Wo auch immer es Raisevent gibt, kann ich es durch eine Funktion oder einen Prozess ersetzen. Also, was ist der wirkliche Vorteil von Ereignissen und in welchen Fällen kann ich sie anstelle von Funktionen und Prozeduren verwenden?

+2

Ereignisse werden zum Entkoppeln von Objekten verwendet. Wenn Sie ein Ereignis behandeln, hat das Objekt, das das Ereignis enthält, keine Ahnung, wer das Ereignis abonniert hat. Es erhält nur einen "Zeiger" auf eine Methode, die es aufruft, wenn das Ereignis ausgelöst wird. Dadurch können verschiedene Objekte miteinander kommunizieren, ohne irgendwelche Implementierungsdetails des anderen Objekts zu kennen. Das einzige, was bekannt ist, sind die öffentlichen Schnittstellen, in diesem Fall Ereignisse und Event-Handler. –

Antwort

1

Mal sehen, ob Sie es mit einem Beispiel verstehen. Sie haben die Button Kontrolle. Es definiert viele Ereignisse (Click,MouseDown,Keypress ...). Wenn Sie eine Taste in eine Form setzen, entscheiden Sie dort was sind die Ereignisse, die Sie verwalten möchten. In der Form können Sie also etwas tun, wenn Sie auf eine Schaltfläche klicken oder nichts tun.

Stellen Sie sich vor, wenn dies mit regulären Methoden gemacht wurde. In diesem Fall sollte die Schaltfläche einen Verweis auf das Formular haben, in dem sich die Schaltfläche befindet, und das Formular sollte eine Click-Methode haben, ob sie es verwendet oder nicht. Die ereignisgesteuerte Programmierung macht es sehr einfach, einige Ereignisse zu definieren, die signalisieren, wenn in einer Klasse etwas passiert, und ist die Klasse, die die Instanz erstellt, die entscheidet, ob das Ereignis relevant ist oder nicht.

0

danke für die Klarstellung, ich habe den Punkt. Der Punkt, den ich verpasste war: Ereignis wird in der gleichen Klasse gefeuert, aber die Ausführung erfolgt in einer verschiedenen Klasse.

Ich meine, wenn ich eine Klasse definiere, kann ich RaiseEvent irgendwo platzieren, um etwas zu erkennen, aber ich korreliere das Ereignis mit einem Sub in einer anderen Klasse.

so, in einer solchen Klasse namens Wallet kann ich eine Aussage wie gesagt:

If Dollars > 5 Then 
     RaiseEvent Above5() 
    End If 

und in so unterschiedlichen Klasse namens AllWallet:

Dim WithEvents myWallet as new Wallet 
Sub myWallet_Above5() Handles myWallet.Above5 
    MsgBox("Dollars are more than 5") 
End Sub 

sonst, ich meine, wenn Ereignisse in gefeuert In der gleichen Klasse, in der sie definiert sind, können Sub und Funktionen Ereignisse ersetzen.

danke an alle

+0

Eine Klasse sollte keine eigenen Ereignisse verarbeiten. Ereignisse sind normalerweise dazu gedacht, etwas außerhalb der Klasse zu melden, dass etwas wie in Ihrem Beispiel passiert ist. Der Punkt ist, wenn eine Klasse ein Ereignis auslöst, weiß sie nicht, was der Teilnehmer des Ereignisses tun wird, noch sollte es es kümmern. –

Verwandte Themen