Intern
Šta su izuzeci u programskom jeziku C#?
sobes.tech АИ
Одговор од АИ
Изузеци у Ц# су аномалне ситуације или грешке које се јављају током извршавања програма и нарушавају његов нормалан ток.
Они омогућавају одвајање кода за обраду грешака од главног логичког кода апликације и пружају структуриранији приступ управљању грешкама.
Главни аспекти изузетака у Ц#:
- Типови изузетака: Ц# има хијерархију стандардних класа изузетака које наследју од основне класе
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), "Вредност мора бити непозитивна."); // Генерисање сопственог изузетка
}
// ... даља логика
}
}