Sobes.tech
Intern

Илмҳои барномасозии C# чистанд?

sobes.tech AI

Ҷавоб аз AI

Ихтисосҳо дар C# ҳолатҳои ғайриоддӣ ё хатоҳо мебошанд, ки дар вақти иҷрои барнома рӯ медиҳанд ва ҷараёни муқаррарии онро вайрон мекунанд.

Онҳо имкон медиҳанд, ки коди коркарди хато аз коди асосии логикаи барнома ҷудо карда шавад ва муносибати сохторӣ ба идоракунии хатоҳо таъмин карда шавад.

Аспектҳои асосии ихтисосҳо дар C#:

  1. Намудҳои ихтисосҳо: C# дорои хирархияи синфҳои стандартии ихтисосҳо мебошад, ки аз синфи асосии 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), "Меъёри бояд мусбат бошад."); // Генератсияи ихтисоси худӣ
        }
        // ... логикаи минбаъда
    }
}