La gestió d'excepcions és una part fonamental de la programació en C#. Les excepcions són errors que es produeixen durant l'execució d'un programa. En aquest tema, aprendrem com manejar aquestes excepcions per evitar que el nostre programa es bloquegi inesperadament.
Conceptes Clau
- Excepcions: Errors que es produeixen durant l'execució del programa.
- Try-Catch: Blocs de codi utilitzats per capturar i manejar excepcions.
- Finally: Bloc de codi que s'executa sempre, independentment de si es produeix una excepció o no.
- Throw: Instrucció utilitzada per llançar una excepció.
Try-Catch
El bloc try-catch
s'utilitza per capturar excepcions i manejar-les de manera adequada. La sintaxi bàsica és la següent:
try { // Codi que pot produir una excepció } catch (Exception ex) { // Codi per manejar l'excepció Console.WriteLine(ex.Message); }
Exemple Pràctic
using System; class Program { static void Main() { try { int[] numbers = { 1, 2, 3 }; Console.WriteLine(numbers[5]); // Això produirà una excepció } catch (IndexOutOfRangeException ex) { Console.WriteLine("S'ha produït una excepció: " + ex.Message); } } }
En aquest exemple, intentem accedir a un índex que no existeix en l'array, la qual cosa produeix una excepció IndexOutOfRangeException
. El bloc catch
captura aquesta excepció i mostra un missatge a la consola.
Finally
El bloc finally
s'utilitza per executar codi que ha de córrer independentment de si es produeix una excepció o no. És útil per alliberar recursos, tancar fitxers, etc.
Exemple Pràctic
using System; using System.IO; class Program { static void Main() { StreamReader reader = null; try { reader = new StreamReader("file.txt"); Console.WriteLine(reader.ReadToEnd()); } catch (FileNotFoundException ex) { Console.WriteLine("Fitxer no trobat: " + ex.Message); } finally { if (reader != null) { reader.Close(); } } } }
En aquest exemple, el bloc finally
s'assegura que el fitxer es tanca, independentment de si es produeix una excepció o no.
Throw
La instrucció throw
s'utilitza per llançar una excepció. Això pot ser útil per crear les teves pròpies excepcions personalitzades.
Exemple Pràctic
using System; class Program { static void Main() { try { ValidateAge(15); } catch (ArgumentException ex) { Console.WriteLine("Error: " + ex.Message); } } static void ValidateAge(int age) { if (age < 18) { throw new ArgumentException("L'edat ha de ser almenys 18."); } } }
En aquest exemple, la funció ValidateAge
llança una excepció ArgumentException
si l'edat és menor de 18.
Exercicis Pràctics
Exercici 1
Escriu un programa que demani a l'usuari que introdueixi dos números i mostri la seva divisió. Utilitza blocs try-catch
per manejar possibles excepcions com la divisió per zero.
Solució
using System; class Program { static void Main() { try { Console.Write("Introdueix el primer número: "); int num1 = int.Parse(Console.ReadLine()); Console.Write("Introdueix el segon número: "); int num2 = int.Parse(Console.ReadLine()); int result = num1 / num2; Console.WriteLine("El resultat és: " + result); } catch (DivideByZeroException ex) { Console.WriteLine("Error: No es pot dividir per zero."); } catch (FormatException ex) { Console.WriteLine("Error: Entrada no vàlida."); } } }
Exercici 2
Crea una funció que llegeixi un fitxer de text i mostri el seu contingut. Utilitza blocs try-catch-finally
per manejar possibles excepcions com FileNotFoundException
i assegurar-te que el fitxer es tanca correctament.
Solució
using System; using System.IO; class Program { static void Main() { ReadFile("example.txt"); } static void ReadFile(string filePath) { StreamReader reader = null; try { reader = new StreamReader(filePath); Console.WriteLine(reader.ReadToEnd()); } catch (FileNotFoundException ex) { Console.WriteLine("Fitxer no trobat: " + ex.Message); } catch (Exception ex) { Console.WriteLine("S'ha produït un error: " + ex.Message); } finally { if (reader != null) { reader.Close(); } } } }
Resum
En aquesta secció, hem après com manejar excepcions en C# utilitzant blocs try-catch
, finally
i la instrucció throw
. La gestió d'excepcions és crucial per crear aplicacions robustes i fiables. Hem vist exemples pràctics i hem realitzat exercicis per reforçar els conceptes apresos. Ara estem preparats per avançar al següent tema del curs.
Curs de Programació en C#
Mòdul 1: Introducció al C#
- Introducció al C#
- Configuració de l'Entorn de Desenvolupament
- Programa Hello World
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
Mòdul 2: Estructures de Control
Mòdul 3: Programació Orientada a Objectes
Mòdul 4: Conceptes Avançats de C#
- Interfícies
- Delegats i Esdeveniments
- Genèrics
- Col·leccions
- LINQ (Consulta Integrada al Llenguatge)
- Programació Asíncrona
Mòdul 5: Treballant amb Dades
Mòdul 6: Temes Avançats
- Reflexió
- Atributs
- Programació Dinàmica
- Gestió de Memòria i Recollida d'Escombraries
- Multifil i Programació Paral·lela
Mòdul 7: Construcció d'Aplicacions
Mòdul 8: Millors Pràctiques i Patrons de Disseny
- Estàndards de Codificació i Millors Pràctiques
- Patrons de Disseny
- Proves Unitàries
- Revisió de Codi i Refactorització