Sommario:
Definizione: che cosa significa finalmente blocco?
Un blocco finally, nel contesto di C #, fa riferimento a un blocco di istruzioni che vengono sempre eseguite, indipendentemente da eventi imprevisti o eccezioni che possono verificarsi durante l'esecuzione di un'applicazione. Viene utilizzato facoltativamente con il blocco "try / catch" e garantisce l'esecuzione di qualsiasi codice che deve essere eseguito prima di uscire dal blocco "try", indipendentemente dall'esito positivo o negativo dell'esecuzione dell'applicazione.
L'esecuzione di un blocco finally ha lo scopo di liberare risorse, come le connessioni al database, che di solito sono disponibili in quantità limitate. Con questo meccanismo, lo smaltimento delle risorse avviene prima dell'operazione di finalizzazione del Garbage Collector, ottimizzando così la memoria.
Techopedia spiega finalmente Block
Il codice nel blocco finally può essere utilizzato per gestire le eccezioni non appena si verificano, ripulire la memoria allocata nel blocco "try" o eliminare gli oggetti che contengono risorse esterne (come gli handle di file) utilizzati nel blocco "try". Un blocco finally facilita anche l'esecuzione di attività di pulizia come il ripristino di un cursore su uno stato normale prima del tempo di un'eccezione.
In generale, il codice all'interno di un blocco finally viene eseguito quando il controllo esce da un blocco try a seguito della normale esecuzione, a seguito dell'esecuzione di un'istruzione "break", "goto", "continue" o "return" o due con un'eccezione dall'istruzione try.
Ogni volta che si verifica un'eccezione nel blocco try, il controllo passa dalla linea che ha causato l'eccezione al blocco catch più vicino (gestore eccezioni) e quindi al blocco finally. Inoltre, quando un'eccezione viene riproposta in un blocco catch, il controllo trasferisce al blocco finally. Pertanto, il codice che segue la riga in cui si è verificata l'eccezione verrà ignorato.
Le eccezioni non devono essere generate esplicitamente in un blocco finally. Se si verifica un'eccezione durante l'esecuzione di un blocco finally, qualsiasi codice dopo il punto in cui viene generata l'eccezione non verrà eseguito e l'eccezione si propagherà al blocco di prova che racchiude esterno. Se il blocco finally sta già gestendo un'altra eccezione, ciò comporta la fine dell'elaborazione dell'eccezione corrente.
Bisogna fare attenzione a non trasferire esplicitamente l'esecuzione all'interno o all'esterno di un blocco infine poiché non si tratta di un trasferimento valido.