Sobes.tech
Intern

Šta su izuzeci u programskom jeziku C#?

sobes.tech АИ

Одговор од АИ

Изузеци у Ц# су аномалне ситуације или грешке које се јављају током извршавања програма и нарушавају његов нормалан ток.

Они омогућавају одвајање кода за обраду грешака од главног логичког кода апликације и пружају структуриранији приступ управљању грешкама.

Главни аспекти изузетака у Ц#:

  1. Типови изузетака: Ц# има хијерархију стандардних класа изузетака које наследју од основне класе System.Exception. На пример, System.NullReferenceException, System.DivideByZeroException, System.IO.FileNotFoundException. Могу се креирати и сопствене класе изузетака.
  2. Генерисање изузетака (throw): Изузеће се генерише помоћу кључне речи throw.
  3. Обрада изузетака (try-catch): Блок try садржи код који може генерисати изузеће. Блок catch ухвата одређени тип изузетка и извршава код за његову обраду.
  4. Завршни блок (finally): Блок finally се увек извршава, без обзира да ли је дошло до изузетка или не. Често се користи за ослобађање ресурса.
  5. Оператор using: Погоднији начин за управљање ресурсима, који гарантује позив метода Dispose. Он је аналоган конструкцији try-finally за објекте који реализују интерфејс IDisposable.
  6. Филтри изузетака: Омогућавају додавање услова на 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), "Вредност мора бити непозитивна."); // Генерисање сопственог изузетка
        }
        // ... даља логика
    }
}