Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [VB.NET] Scopo del blocco Finally...

    Ho un attimo di defaillance mentale, per cui mi sfugge un attimo il senso del blocco Finally in Try... Catch

    Esso è definito come un blocco in cui il codice viene eseguito COMUNQUE, ma la mia domanda è: ma tutto il codice che SEGUE un Try... Catch non viene eseguito comunque ?

    Faccio un esempio pratico per non andare OT:

    codice:
    Private Sub Pippo()
    
    Dim Str1 as String = "Pippo"
    Dim Str2 as string = nothing
    
    Try
    
       Str1 = .... codice che potrebbe provocare errore
       Label1.Text = Str1
    
    Catch ex as Exception
    
       Debug.Print ex.ToString
    
    Finally
    
       Str1 = Nothing
       Str2 = "Paperino"
    
    End Try
    
    End Sub
    codice:
    Private Sub Pippo()
    
    Dim Str1 as String = "Pippo"
    Dim Str2 as string = nothing
    
    Try
    
       Str1 = .... codice che potrebbe provocare errore
       Label1.Text = Str1
    
    Catch ex as Exception
    
       Debug.Print ex.ToString
    
    End Try
    
       Str1 = Nothing
       Str2 = "Paperino"
    
    End Sub
    una volta eseguite, le due sub danno lo stesso risultato per Str1 e Str2... ma allora quale è la funzione pratica di Finally??

  2. #2

  3. #3
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    è un esempio valido solo per il tuo particolare caso.
    Lo scopo del finally non è eseguire codice "dopo" il try catch ma di eseguire codice "sempre" qualsiasi cosa accada dopo il try e dopo i catch anche se per esempio ci sono dei return o dei throw cosa peraltro molto comune.
    Il tipo di codice da eseguire in un finally non è quasi mai codice che contiene logica applicativa ma codice di pulizia (dispose ecc.)

    considera questo


    codice:
    try
    {
      p = new Pippo();
      p.Risultato =  5 / 0;
    
      return p;
    }
    catch
    {
      throw;
    }
    finally
    {
      pippo.dispose();
    }
    sia nel try che nel catch la funzione termina passando il controllo al chiamante in modi diversi (return e throw) ma in entrambi i casi il blocco finally viene sempre eseguito.
    Ps.
    Non si possono usare return o throw nel finally.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.