Ja, Ihnen fehlt definitiv etwas . Gotos werden normalerweise, wie Sie sagten, verwendet, um eine Einweg-Kontrollübertragung durchzuführen.
Ereignisse tun dies jedoch nicht. Wenn der Code das Ereignis auslöst, weiß er genau, dass die Codeausführung nach Veröffentlichung (oder Verarbeitung, Warteschlange, Auslösung usw.) in der nächsten Zeile des Codes, der das Ereignis generiert hat, fortgesetzt wird.
Die Verwendung von goto schafft eine sehr enge Kopplung zwischen dem Code, der diese Anweisung aufruft, und dem Code, der sich auf der Empfangsseite befindet. Entwickler müssen beide Orte genau kennen, um goto verwenden zu können.
Auf der anderen Seite würde Code, der Ereignisse auslöst, normalerweise nicht wissen oder sich nicht darum kümmern, wer daran interessiert ist, auf dieses Ereignis zu warten. Es könnte einen Zuhörer geben. Oder es können 100 oder 0 Listener vorhanden sein. Diese Listener befinden sich möglicherweise im selben Programm, in dem das Ereignis ausgelöst wurde, oder sie befinden sich in einer völlig anderen Anwendung oder auf einem anderen Computer. Für den Verlag ist seine Arbeit erledigt, sobald er das Ereignis generiert.
Wenn Sie bisher bei mir sind, ist das, was ich oben beschrieben habe, der ideale Fall für ein Pub / Sub-Muster. Leider sind die Dinge in der realen Welt nicht immer ideal und es gibt Fälle, in denen Publisher ein Ereignis generieren, ein Abonnent aufgerufen wird, eine ganze Reihe von Status ändert und zu dem Zeitpunkt, an dem die Codeausführung zum Publisher zurückkehrt, "die Welt" zu haben scheint wurde auf den Kopf gestellt. Und ich bin sicher, dass Sie in der Vergangenheit darauf gestoßen sind, da diese Bedingung häufig auftritt, wenn Pub / Sub-Muster auf sehr einfache Weise implementiert werden (z. B. durch Verwendung von Delegaten oder Ereignissen in C # oder Funktions- / Schnittstellenzeigern in C. / C ++).
Dieses Problem ist jedoch nicht unbedingt das Pub / Sub-Muster, sondern die Implementierung. Aus diesem Grund sind viele Systeme auf Warteschlangen angewiesen, sodass ein veröffentlichtes Ereignis einfach in die Warteschlange gestellt wird, um später aufgerufen zu werden, sodass der Herausgeber die Ausführung beenden kann, während die Welt noch intakt ist. Wenn der Herausgeber seine Arbeit erledigt hat, wird eine Ereignisschleife (auch als Versandschleife bezeichnet) die Ereignisse abbrechen und Abonnenten aufrufen.
return
,try/catch
,break
,continue
,switch
- das sind allegoto
mit verschiedenen Ebenen der Beschränkung gebaut in Goto als schädlich zu überlegen , wie der Code funktioniert schädlich ist..