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:
- Tüübid: C#-l on standardsete erandite klasside hierarhia, mis pärineb baasklassist
System.Exception. NäiteksSystem.NullReferenceException,System.DivideByZeroException,System.IO.FileNotFoundException. Samuti saab luua oma erandite klasse. - Erandi genereerimine (throw): Erand genereeritakse võtmesõna
throwabil. - Erandite püüd (try-catch):
tryplokk sisaldab koodi, mis võib erandi tekitada.catchplokk püüab kindla tüüpi erandi ja täidab selle töötlemise koodi. - Lõplik plokk (finally):
finallyplokk täidetakse alati, olenemata sellest, kas erand tekkis või mitte. Seda kasutatakse sageli ressursside vabastamiseks. using-operaator: Mugavam viis ressursside haldamiseks, mis tagabDisposemeetodi kutsumise. See on sarnanetry-finallystruktuurileIDisposable-liidest rakendavate objektide puhul.- Erandite filtrimine: võimaldab lisada tingimuse
catchplokile, 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
}
}