Intern
Ի՞նչ են բացառությունները C# ծրագրավորման լեզվում։
sobes.tech AI
Պատասխան AI-ից
C#-ում արտակարգ իրավիճակներն կամ սխալները այն իրավիճակներն են, որոնք տեղի են ունենում ծրագրի գործարկման ժամանակ և խանգարում նրա նորմալ հոսքին:
Նրանք թույլ են տալիս առանձնացնել սխալների մշակման կոդը ծրագրի հիմնական տրամաբանությունից և ապահովում ավելի կառուցվածքային մոտեցում սխալների կառավարմանը:
C#-ում արտակարգ իրավիճակների հիմնական ասպեկտները՝
- Տիպեր: C#-ում կա ստանդարտ արտակարգ իրավիճակների դասերի հիերարխիա, որոնք ժառանգում են
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), "Արժեքը պետք է լինի ոչ բացասական:");
}
// ... հետագա տրամաբանություն
}
}