Sobes.tech
Intern

Mis on erandid C# programmeerimiskeeles?

sobes.tech AI

Vastus AI-lt

C#-s on erandid ebanormaalsete olukordade või vigade, mis tekivad programmi täitmise ajal ja häirivad selle normaalset voogu.

Need võimaldavad eraldada vigade töötlemise koodi rakenduse põhiloogikast ning tagavad struktureerituma lähenemise vigade haldamiseks.

C#-s on erandite peamised aspektid:

  1. Tüübid: C#-l on standardsete erandite klasside hierarhia, mis pärineb baasklassist System.Exception. Näiteks System.NullReferenceException, System.DivideByZeroException, System.IO.FileNotFoundException. Samuti saab luua oma erandite klasse.
  2. Erandi genereerimine (throw): Erand genereeritakse võtmesõna throw abil.
  3. Erandite püüd (try-catch): try plokk sisaldab koodi, mis võib erandi tekitada. catch plokk püüab kindla tüüpi erandi ja täidab selle töötlemise koodi.
  4. Lõplik plokk (finally): finally plokk täidetakse alati, olenemata sellest, kas erand tekkis või mitte. Seda kasutatakse sageli ressursside vabastamiseks.
  5. using-operaator: Mugavam viis ressursside haldamiseks, mis tagab Dispose meetodi kutsumise. See on sarnane try-finally struktuurile IDisposable-liidest rakendavate objektide puhul.
  6. Erandite filtrimine: võimaldab lisada tingimuse catch plokile, et teha spetsiifilisemat erandite töötlemist.

Näide kasutamisest:

public class Example
{
    public void ProcessData(int denominator)
    {
        try
        {
            int result = 10 / denominator; // Võib tekitada `DivideByZeroException`
            Console.WriteLine($"Tulemus: {result}");
        }
        catch (DivideByZeroException ex) // Püüab konkreetse erandi
        {
            Console.WriteLine("Viga: nulliga jagamine on võimatu.");
            // Erandi logimine, kui vaja
            // Console.WriteLine($"Erandi detailid: {ex.Message}");
        }
        catch (Exception ex) // Püüab mis tahes muu erandi
        {
            Console.WriteLine($"Tundmatu viga: {ex.Message}");
        }
        finally // See plokk täidetakse alati
        {
            Console.WriteLine("Töötlus lõppes.");
        }
    }

    public void UsingExample()
    {
        // Näide `using` kasutamisest automaatseks `Dispose`-i kutsumiseks
        using (StreamReader reader = new StreamReader("file.txt"))
        {
            string line = reader.ReadLine();
            Console.WriteLine(line);
        } // Siin kutsutakse `reader.Dispose()` automaatselt, isegi kui tekib erand
    }

    public void ThrowExample(int value)
    {
        if (value < 0)
        {
            throw new ArgumentOutOfRangeException(nameof(value), "Väärtus peab olema mitte-negatiivne."); // Oma erandi genereerimine
        }
        // ... edasine loogika
    }
}