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), "Արժեքը պետք է լինի ոչ բացասական:");
        }
        // ... հետագա տրամաբանություն
    }
}