Intern
Kas yra išimtys C# programavimo kalboje?
sobes.tech AI
Atsakymas iš AI
C# išskirtiniai atvejai yra nenormalios situacijos arba klaidos, kurios įvyksta programos vykdymo metu ir trikdo jos įprastą srautą.
Jos leidžia atskirti klaidų apdorojimo kodą nuo pagrindinio programos logikos kodo ir užtikrina struktūruotesnį klaidų valdymo požiūrį.
Pagrindiniai C# išskirtinių atvejų aspektai:
- Tipai: C# turi standartinių išskirtinių klasių hierarchiją, paveldinčią iš bazinės
System.Exceptionklasės. Pavyzdžiui,System.NullReferenceException,System.DivideByZeroException,System.IO.FileNotFoundException. Taip pat galima kurti savo išskirtinių klasių. - Išskirtinių atvejų generavimas (throw): Išskirtinis atvejis generuojamas naudojant raktinę žodį
throw. - Išskirtinių atvejų gaudymas (try-catch):
tryblokas apima kodą, kuris gali sukelti išskirtinį atvejį.catchblokas gaudo nurodytą išskirtinio atvejo tipą ir vykdo jo apdorojimo kodą. - Galutinis blokas (finally):
finallyblokas visada vykdomas, nepriklausomai nuo to, ar įvyko išskirtinis atvejis ar ne. Dažnai naudojamas išteklių išlaisvinimui. - Naudojant
usingoperatorių: Patogesnis būdas valdyti išteklius, kuris garantuojaDisposemetodo iškvietimą. Tai panašu įtry-finallystruktūrą objektams, įgyvendinantiemsIDisposablesąsają. - Išskirtinių atvejų filtrai: Leidžia pridėti sąlygą prie
catchbloko, siekiant specifinio išskirtinių atvejų apdorojimo.
Pavyzdys naudojimo:
public class Example
{
public void ProcessData(int denominator)
{
try
{
int result = 10 / denominator; // Gali sukelti `DivideByZeroException`
Console.WriteLine($"Rezultatas: {result}");
}
catch (DivideByZeroException ex) // Gaudo konkretų išskirtinį atvejį
{
Console.WriteLine("Klaida: negalima dalinti iš nulio.");
// Klaidos registravimas, jei reikia
// Console.WriteLine($"Išskirtinio atvejo detalės: {ex.Message}");
}
catch (Exception ex) // Gaudo bet kokį kitą išskirtinį atvejį
{
Console.WriteLine($"Nenumatyta klaida: {ex.Message}");
}
finally // Šis blokas visada vykdomas
{
Console.WriteLine("Apdorojimas baigtas.");
}
}
public void UsingExample()
{
// Pavyzdys naudojant `using` automatiškai iškvietus `Dispose`
using (StreamReader reader = new StreamReader("file.txt"))
{
string line = reader.ReadLine();
Console.WriteLine(line);
} // Čia `reader.Dispose()` iškviečiama automatiškai, net jei įvyksta išskirtinis atvejis
}
public void ThrowExample(int value)
{
if (value < 0)
{
throw new ArgumentOutOfRangeException(nameof(value), "Reikšmė turi būti neigiama."); // Savo išskirtinio atvejo generavimas
}
// ... tolimesnė logika
}
}