C #: Wird "werfen" die aktuelle Funktion verlassen?

7

Wenn es eine throw -Anweisung in der Mitte einer Funktion gibt, endet die Funktion an diesem Punkt?

    
Craig Johnston 02.03.2011, 07:17
quelle

7 Antworten

13

Ja, mit Ausnahme von finally Blöcken, oder wenn in der Funktion ein Ausnahmebehandler vorhanden ist, der den Typ der von Ihnen geworfenen Ausnahme abfangen kann.

    
Greg Hewgill 02.03.2011, 07:19
quelle
5

Das Steuerelement wird an den nächsten Ausnahmebehandler ( catch block) im Aufrufstapel übergeben, unabhängig davon, ob es sich um die aktuelle Methode oder einen seiner übergeordneten Parameter handelt. Wenn die throw nicht in einem try / catch-Block gekapselt ist, werden alle finally -Bausteine ​​ausgeführt, bevor ein übergeordneter catch-Block gesucht wird.

    
Michael Petrotta 02.03.2011 07:20
quelle
1

Hast du es versucht? :)

Ich denke, die richtige Antwort ist, es kommt darauf an. Wenn du den Wurf mit einem Versuch / Fang aus irgendeinem seltsamen Grund umhüllst, dann nein. Wenn Sie das nicht getan haben, dann ja, es sei denn, Sie haben die Ausnahme nicht irgendwo im Call-Stack gefunden, in diesem Fall stürzt Ihre gesamte Anwendung ab.

    
Dave 02.03.2011 07:19
quelle
1

Ja, es sei denn, Sie fangen es ab oder blockieren es endgültig:

%Vor%     
Holstebroe 02.03.2011 07:20
quelle
0

Ja, ja. Es erzeugt eine Ausnahme, die den aufrufenden Stapel hinaufgeht.

    
FarligOpptreden 02.03.2011 07:18
quelle
0

Ja. Es wird zum nächsten catch -Block gehen.

    
nybbler 02.03.2011 07:19
quelle
0

Eine Ausnahme ist ein Ereignis, das passierte, wenn es nicht geschehen sollte, und daher weiß die Anwendung nicht, was mit einem solchen Ereignis geschehen soll. In allen OOP-Sprachen, die ich kenne, ist es die Laufzeit, die Funktion, die das Ereignis aufgerufen hat, anzuhalten und dann die Ausnahme auf den Stapel zu werfen, bis jemand weiß, was damit zu tun ist. Hier kommen die try / catch-Blöcke ins Spiel.

    
PedroC88 02.03.2011 07:25
quelle

Tags und Links