5-8 Маъруза Рекурсия


Амалий машғулот 3. Истисноларни қайта ишлаш


Download 110.5 Kb.
bet6/6
Sana01.01.2023
Hajmi110.5 Kb.
#1074629
1   2   3   4   5   6
Bog'liq
5-8 Maruza Рекурция(uz)

Амалий машғулот 3. Истисноларни қайта ишлаш


Ишдан мақсад: С# дастурлаш тилида истиснолар ёки хатоликлар билан ишлаш, try, Catch, throw, finally блоклари устида турли амаллар бажариш, улардан фойдаланиш кўникмаларига эга бўлиш. Дастурда истиснолардан фойдалана олиш.
Масаланинг қўйилиши: Тингловчи вариант бўйича берилган масалани С# дастурлаш тилида ишлаши ва керакли натижа олиши лозим.
Ишни бажариш учун намуна
Бир нечта catch блокларни ёзганимизда шу нарсани эътиборга олишимиз керакки истисно холат биринчи catch блок орқали қайта ишланади. Мисол тариқасида, биринчи catch блоки нима эканлигини кўрсатиш учун аввалги мисолга яна битта CarlsDeadException va ArgumentOutOfRangeException дан ташқари барча истисноларни тутиб олмоқчи бўлган catch блокини қўшамиз.

// This code will not compile!
static void Main(string[] args)
{
Console.WriteLine("***** Handling Multiple Exceptions *****\n");
Car myCar = new Car("Rusty", 90);
try
{
// Trigger an argument out of range exception.
myCar.Accelerate(-10);
}
catch(Exception e)
{
// Process all other exceptions?
Console.WriteLine(e.Message);
}
catch (CarIsDeadException e)
{
Console.WriteLine(e.Message);
}
catch (ArgumentOutOfRangeException e)
{
Console.WriteLine(e.Message);
}
Console.ReadLine();
}

Бу истисноларни қайта ишлаш мантиғи компиляция босқичида хатоликка олиб келади. Муаммо шундаки, биринчи catch блоки System.Exception хатолигидан ташқари барча истисноларни қайта ишлай олади, CarlsDeadException va ArgumentOutOfRangeException ларни ҳам. Охирги 2та catch блоки имконсиздир.
Битта эмпирик қоидани ёдда сақланг: catch блокларини шундай жойлаштириш керакки, биринчи catch энг махсус истисноларни, охирги catch эса умумийроқ истисноларни қайта ишлаши керак.
Шундай қилиб, агар ихтиёрий истисноларни қайта ишлайдиган catch блокини аниқлайдиган бўлсак, у қуйидагича аниқланади:

// This code compiles just fine.
static void Main(string[] args)
{
Console.WriteLine("***** Handling Multiple Exceptions *****\n");
Car myCar = new Car("Rusty", 90);
try
{
// Trigger an argument out of range exception.
myCar.Accelerate(-10);
}
catch (CarIsDeadException e)
{
Console.WriteLine(e.Message);
}
catch (ArgumentOutOfRangeException e)
{
Console.WriteLine(e.Message);
}
// This will catch any other exception
// beyond CarIsDeadException or
// ArgumentOutOfRangeException.
catch (Exception e)
{
Console.WriteLine(e.Message);
}
Console.ReadLine();
}

// A generic catch.
static void Main(string[] args)
{
Console.WriteLine("***** Handling Multiple Exceptions *****\n");
Car myCar = new Car("Rusty", 90);
try
{
myCar.Accelerate(90);
}
catch
{
Console.WriteLine("Something bad happened...");
}
Console.ReadLine();
}



Download 110.5 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling