| 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 |