Sobes.tech
Intern

Ce sunt excepțiile în limbajul de programare C#?

sobes.tech AI

Răspuns de la AI

Excepțiile în C# sunt situații anormale sau erori care apar în timpul execuției programului și întrerup fluxul normal.

Ele permit separarea codului de gestionare a erorilor de codul principal al logicii aplicației și oferă o abordare mai structurată pentru gestionarea erorilor.

Aspecte principale ale excepțiilor în C#:

  1. Tipuri de excepții: C# are o ierarhie de clase de excepții standard care moștenesc din clasa de bază System.Exception. De exemplu, System.NullReferenceException, System.DivideByZeroException, System.IO.FileNotFoundException. De asemenea, se pot crea clase de excepții personalizate.
  2. Generarea de excepții (throw): Excepția este generată folosind cuvântul cheie throw.
  3. Capturarea excepțiilor (try-catch): Blocul try conține codul care poate genera o excepție. Blocul catch capturează un anumit tip de excepție și execută codul pentru gestionarea acesteia.
  4. Blocul finally: Blocul finally se execută întotdeauna, indiferent dacă a fost generată o excepție sau nu. Este adesea folosit pentru eliberarea resurselor.
  5. Operatorul using: O metodă mai convenabilă de gestionare a resurselor, care garantează apelarea metodei Dispose. Este similar cu construcția try-finally pentru obiecte care implementează interfața IDisposable.
  6. Filtre de excepții: Permite adăugarea unei condiții la blocul catch pentru o gestionare mai specifică a excepțiilor.

Exemplu de utilizare:

public class Example
{
    public void ProcessData(int denominator)
    {
        try
        {
            int result = 10 / denominator; // Poate genera DivideByZeroException
            Console.WriteLine($"Rezultat: {result}");
        }
        catch (DivideByZeroException ex) // Capturăm o excepție specifică
        {
            Console.WriteLine("Eroare: Nu se poate împărți la zero.");
            // Înregistrarea excepției, dacă este necesar
            // Console.WriteLine($"Detalii despre excepție: {ex.Message}");
        }
        catch (Exception ex) // Capturăm orice altă excepție
        {
            Console.WriteLine($"A apărut o eroare neașteptată: {ex.Message}");
        }
        finally // Acest bloc se va executa întotdeauna
        {
            Console.WriteLine("Procesare finalizată.");
        }
    }

    public void UsingExample()
    {
        // Exemplu de utilizare a using pentru apelarea automată a Dispose
        using (StreamReader reader = new StreamReader("file.txt"))
        {
            string line = reader.ReadLine();
            Console.WriteLine(line);
        } // Aici, reader.Dispose() este apelat automat, chiar dacă apare o excepție
    }

    public void ThrowExample(int value)
    {
        if (value < 0)
        {
            throw new ArgumentOutOfRangeException(nameof(value), "Valoarea trebuie să fie nenegativă."); // Generarea unei excepții proprii
        }
        // ... logica ulterioară
    }
}

Utilizarea excepțiilor ajută la crearea unor aplicații mai fiabile, mai ușor de citit și de întreținut, separând gestionarea erorilor de logica principală.