Intern
Какво са изключенията в езика за програмиране C#?
sobes.tech AI
Отговор от AI
Изключенията в C# са аномални ситуации или грешки, които възникват по време на изпълнение на програмата и нарушават нейния нормален поток.
Те позволяват да се отдели кодът за обработка на грешки от основния логически код на приложението и осигуряват по-структуриран подход към управлението на грешките.
Основните аспекти на изключенията в C#:
- Типове изключения: C# разполага с йерархия от стандартни класове за изключения, наследяващи се от базовия клас
System.Exception. Например,System.NullReferenceException,System.DivideByZeroException,System.IO.FileNotFoundException. Могат да се създават и собствени класове за изключения. - Генериране на изключения (throw): Изключение се генерира с помощта на ключовата дума
throw. - Обработка на изключения (try-catch): Блокът
tryсъдържа код, който може да генерира изключение. Блокътcatchулавя определен тип изключение и изпълнява кода за неговата обработка. - Завършващ блок (finally): Блокът
finallyвинаги се изпълнява, независимо дали е възникнало изключение или не. Често се използва за освобождаване на ресурси. - Оператор using: По-удобен начин за управление на ресурсите, който гарантира извикването на метода
Dispose. Той е аналогичен на конструкциятаtry-finallyза обекти, реализиращи интерфейсаIDisposable. - Филтри за изключения: Позволяват да се добави условие към блока
catchза по-специфична обработка на изключения.
Пример за използване:
public class Example
{
public void ProcessData(int denominator)
{
try
{
int result = 10 / denominator; // Може да генерира DivideByZeroException
Console.WriteLine($"Резултат: {result}");
}
catch (DivideByZeroException ex) // Улавя конкретно изключение
{
Console.WriteLine("Грешка: не може да се дели на нула.");
// Логиране на изключението, ако е необходимо
// Console.WriteLine($"Детайли за изключението: {ex.Message}");
}
catch (Exception ex) // Улавя всяко друго изключение
{
Console.WriteLine($"Настъпи неочаквана грешка: {ex.Message}");
}
finally // Този блок винаги ще се изпълни
{
Console.WriteLine("Обработката е завършена.");
}
}
public void UsingExample()
{
// Пример за използване на using за автоматично извикване на Dispose
using (StreamReader reader = new StreamReader("file.txt"))
{
string line = reader.ReadLine();
Console.WriteLine(line);
} // Тук reader.Dispose() се извиква автоматично, дори ако възникне изключение
}
public void ThrowExample(int value)
{
if (value < 0)
{
throw new ArgumentOutOfRangeException(nameof(value), "Стойността трябва да е неотрицателна."); // Генериране на собствено изключение
}
// ... допълнителна логика
}
}