Interfeys toifalari tushunchasi Interfeys toifalarni abstract bazaviy sinflar bilan taqqoslash Maxsus interfeyslarni kiritish


Umumiy istisnoni yaratish (yangilanish)


Download 0.77 Mb.
bet23/50
Sana26.01.2023
Hajmi0.77 Mb.
#1129439
1   ...   19   20   21   22   23   24   25   26   ...   50
Bog'liq
MAVZULAR UMUMIY

Umumiy istisnoni yaratish (yangilanish)
Shu o’zimiz yaratgan tayyor Avto sinfidan foydalangan holda, istisno yaratishning eng soda usulini ko’rib chiqaylik. Tezlanish() metodining joriy realizatsiyasi xatolik haqidagi xabarni aks ettiradi, agarda chaqiruvchi kod avtomobilni yuqori chegaradan oshib ketadigan tezlikka chiqarib yuborishga harakat qilsa. Tezlanish() metodini foydalanuvchi avtomobilga o’rnatilgan chegaradan oshib ketuvchi tezlik bermoqchi bo’lganida istisno yaratadigan qilib o’zgartirish uchun System.Exception sinfining yangi nusxasini yaratish va sozlash talab etiladi, bunda faqat o’qish uchun mo’ljallangan Message xossasini sinf konstruktori orqali qiymatlash kerak bo’ladi. Xatolik ob’yektini chaqiruvchi kodga qaytarish uchun C# tilining throw kalit so’zi ishlatiladi. Quyida Tezlanish() metodining yangilangan kodi keltirilgan:
// Agar foydalanuvchi MaxTezlik da ko’rsatlgan chegaradan
// oshirib yuborsa, bu gal istisno yaratiladi
public void Tezlanish(int oshir)
{
if (AvtoIshdanChiqdi)
Console.WriteLine("{0} ishdan chiqdi...", AvtoNomi);
else
{
JoriyTezlik += oshir;
if (JoriyTezlik >= MaxTezlik)
{
AvtoIshdanChiqdi = true;
JoriyTezlik = 0;
// Istisnoni yaratish uchun throw kalkit so’zidan foydalanish
throw new Exception($"{AvtoNomi} qizib ketdi!");
}
else
Console.WriteLine("=>Joriy tezlik = {0}", JoriyTezlik);
}
}
Chaqiruvchi kod qanday qilib bu istisnoni tutib olishini namoyish etishdan oldin, ba’zi qiziqarli jixatlarni aytib o’tish lozim. Avvalo, agar siz istisno yaratayotgan bo’lsangiz, xatolik qanday qilib amalga oshirilishi va qachon istisno yaratilishini o’zingiz mustaqil hal qilasiz. Bu misolda biz Avto ob’yektinini tezligi ko’rsatilgan maksimal qiymatdan oshirishga urinish bo’lganida System.Exception ob’yekti yaratilib, Tezlanish() metodini bajarishni endi davom ettirish mumkin emasligi haqida ogohlantirish berishni ko’zda tutmoqdamiz (yaratilayotgan dasturga bog’liq holda bunday holatni amalga oshirish maqsadga muvofiq yoki yo’q bo’lishi mumkin).
Muqobil hol sifatida Tezlanish() metodini istisno yaratmasdan avtomatik tiklashni amalga oshiradigan qilib yozish ham mumkin edi o’zi. Aslini olganda, istisnolar odatda ancha jiddiy krititk sharoitylar yuz berganida yaratilishi lozim (masalan, kerakli fayl yo’q bo’lganida, ma’lumotlar bazasiga ulanish imkoni bo’lmasa va h. k.). Qanday sabab istisno yaratishi lozimligini hal qilish loyihalash bosqichida jiddiy o’ylab ko’rilishi va yetarlicha asoslanishi lozim. Biroq bizning bu o’rindagi maqsadimiz istisnolar mohiyatini o’rganish bo’lgani bois, avtomobil tezligini ko’rsatilgan maksimal qiymatdan oshirishga urinish istisno keltiruvchi sabab sifatida talqin etilishi o’zini oqlaydi.
Xulas, endi agar Main() metodining yuqoridagi mantig’idan kelib chiqqan holda dasturni yana ishga tushirsak, istisno oxir oqibatda albatta yaratildi. Dastur ekranga chiqargan quyidagi manzaradan ko’rinib turibdiki, yaratilgan istisnoga ishlov berish yo’qligi bois, xatolik yuz bergani haqida uzundan uzoq ko’pso’zli xabar chiqariladi va shundan so’ng dastur ishi to’xtatiladi:
***** Istisnoga oddiy misol *****
=> Avto yaratish va uni ishlatib ko’rish!
Qo’shiq jaranglaydi...
=> CurrentSpeed = 30
=> CurrentSpeed = 40
=> CurrentSpeed = 50
=> CurrentSpeed = 60
=> CurrentSpeed = 70
=> CurrentSpeed = 80
=> CurrentSpeed = 90
Unhandled Exception: System.Exception: Tulpor qizib ketdi!
at SimpleException.Car.Accelerate(Int32 delta) in C:\MyBooks\C# Book (7th ed)
\Code\Chapter_7\SimpleException\Car.cs:line 62
at SimpleException.Program.Main(String[] args) in C:\MyBooks\C# Book (7th ed)
\Code\Chapter_7\SimpleException\Program.cs:line 20
Press any key to continue . . .
C#7 dan oldingi versiyalarda throw konstruktori operator edi, bu esa istisnolarni faqat operatorlar mumkin bo’lgan joylardagina yaratishga izn berardi. C#7 dan boshlab throw konstruktsiyasi ifoda sifatida ham ishlatilishi mumkin va shu bois ifoda raxsat etilgan barcha o’rinlarda kelishi mumkin.


Download 0.77 Mb.

Do'stlaringiz bilan baham:
1   ...   19   20   21   22   23   24   25   26   ...   50




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