Exception | ||
Differenze tra Value e Reference Type |
La gestione degli errori riveste una parte fondamentale in ogni linguaggio di programmazione. I vecchi linguaggi di programmazione facevano un pesante uso dello statement if per permettere al programmatore di rilevare eventuali errori di runtime. Al contrario i moderni linguaggi come C++, Java e C# basano la loro strategia di rilevamento degli errori sull'isolamento del codice. Parte del codice che potrebbe portare ad un errore viene isolato in un blocco, e se un errore dovesse avvenire, verrebbe intercettato e gestito localmente. Il tempo ha dimostrato che questo approccio funziona. C# segue l'approccio di C++ e Java per la gestione degli errori, sollevando eccezioni sugli errori. Si utilizza il blocco try ... catch ... finally : Si isola il codice che potrebbe condurre ad un errore con il try, e quando l'errore avviene il controllo del programma è passato al codice contenuto entro catch. Con l'opzionale finally del codice in esso contento può essere eseguito indipendentemente che l'errore si sia verificato o meno. Ecco la sintassi completa try { // codice che puņ portare ad un errore } catch (Exception Type [ variable ]) { // codice che deve essere eseguito quando avviene l'errore } finally { // codice da eseguire che avvenga o meno // l'errore } Si noti che contrariamente a Java la variabile dell'oggetto exception nella parte catch è opzionale. Ecco un programma che tenta di aprire il file C:\NotThere.txt. Indipendentemente che ci riesca o meno, poi lo chiude. La "@" indica che @"C:\NotThere.txt" è una Verbatim String (stinga alla lettera), ovvero una stringa che deve essere intesa "così com'è" senza interpretare i caratteri contenuti, visto che il backslash "\" potrebbe essere valutato come sequenza di escape. In alternativa si può scrivere: "C:\\NotThere.txt" using System; using System.IO; public class App { public static void Main() { FileStream fs = null; try { fs = new FileStream(@"C:\NotThere.txt", FileMode.Open); } catch (Exception e) { Console.WriteLine(e.Message); } finally { if (fs != null) fs.Close(); } } } I messaggi di errore del runtime sono solitamente esaustivi. Fonti: Documentazione .NET Framework SDK http://msdn.microsoft.com/theshow/Episode008/Richter.html http://www.oreillynet.com/pub/a/dotnet/2001/09/04/error_handling.html |