Изключения - Управление на Грешки
- Теория
- Код
Изключенията в C# са ключов механизъм за справяне с грешки и извънредни ситуации по време на изпълнението на програмата.
Типове Изключения
- System.Exception: Базов клас за всички изключения в .NET.
- System.SystemException: Базов клас за системни изключения.
- System.RuntimeException: Базов клас за грешки, възникващи по време на изпълнението.
Класова Йерархия на Изключения
Object
└── Exception
├── SystemException
│ ├── IndexOutOfRangeException
│ ├── NullReferenceException
│ └── OverflowException
└── ApplicationException
Обработка на Изключения
Използването на try
, catch
, и finally
блокове позволява управление на обработката на изключенията.
Пример с try-catch-finally
try {
// Код, който може да предизвика изключение
} catch (SpecificExceptionType e) {
// Обработка на конкретно изключение
} finally {
// Код, който се изпълнява винаги след `try` блока
}
Хвърляне на Изключения
Можете да хвърлите изключение с throw
.
####Пример за throw
public void PerformAction(string action) {
if (action == null) {
throw new ArgumentNullException("action", "Действието не може да бъде null.");
}
// Оставащият код
}
Създаване на Потребителски Изключения
Потребителските изключения се създават чрез наследяване на клас Exception
.
Пример за Потребителско Изключение
public class CustomException : Exception {
public CustomException(string message) : base(message) {
}
}
Обобщение
- Изключенията в C# осигуряват мощен механизъм за контрол на грешките и изключителните ситуации.
- Правилната обработка на изключенията е ключова за създаването на надеждни и устойчиви програми.
- Създаването на потребителски изключения улеснява специфичното управление на грешките във вашите приложения.
В C# изключенията се използват за управление на грешки и извънредни ситуации, предоставяйки механизъм за промяна на потока на изпълнение на програмата.
Основни видове изключения:
- System.Exception: Базовият клас за всички изключения в .NET.
- System.SystemException: Базов клас за всички предопределени системни изключения.
Пример за хващане на изключение:
try {
int[] myArray = {1, 2, 3};
Console.WriteLine(myArray[5]); // това ще предизвика IndexOutOfRangeException
} catch (IndexOutOfRangeException e) {
Console.WriteLine("Грешка: Извън границите на масива!");
}
Пример за хващане на множество изключения:
try {
// ... код, който може да предизвика различни грешки
} catch (IndexOutOfRangeException e) {
Console.WriteLine("Грешка в масива!");
} catch (ArithmeticException e) {
Console.WriteLine("Аритметична грешка!");
} catch (Exception e) {
Console.WriteLine("Обща грешка: " + e.Message);
}
Задачи:
Задача: Създ айте метод, който преобразува стринг в число. Ако входният стринг не може да бъде преобразуван, хвърлете и обработете изключение.
Решение:
public class DemoExceptions {
public static void Main() {
try {
double number = ConvertToNumber("123.45");
Console.WriteLine("Числото е: " + number);
number = ConvertToNumber("123.abc"); // това ще предизвика грешка
} catch (FormatException e) {
Console.WriteLine("Грешка: Невалиден формат на числото!");
}
}
public static double ConvertToNumber(string str) {
return double.Parse(str);
}
}