.NETda istisnolarga ishlov berishning qurulish bloklari
Istisnolarga tuzilmaviy ishlov berishni qo’llagan holda dasturlash to’rtta o’zaro bog’liq mohiyatni tadbiq etishni nazarda tutadi:
istisnoning tafsilotlarini taqdim etuvchi sinfning toifasi;
tegishli vaziyatlarda (ya’ni muayyan sharoitlarda) chaqiruvchi kodda istisno sinfning nusxasini yaratadigan a’zo;
istisno yaratishga moyil a’zoga murojaat qiladigan chaqiruvchi tomondagi kod bloki;
istisno yuz berganida unga ishlov beradigan (yoki uni ilib oladigan) chaqiruvchi tomon kod bloke;
C# dasturlash tili istisnolarni yaratish va ularga ishlov berishga imkon beruvchi beshta kalit so’zini (try, catch, throw, finally, va when) taklif etadi. Joriy muammoni ifoda etuvchi ob’yekt System.Exception (yoki shundan voris qilingan) sinfni kengaytiradi. Aytilganlarni inobatga olib, keling shu istisnolarga aloqador bazaviy sinfning ahamiyatini ko’rib chiqaylik.
System.Exception'>System.Exception bazaviy sinfi
Barcha istisnolar oxir oqibatda System.Exception bazaviy sinfidan binoga keladi, bu esa o’z navbatida System.Object ning vorisidir. Quyida bu sinfning asosiy qismi keltirilgan (uning ba’zi a’zolari virtual ekanligiga va shu bois voris sinflarda qayta aniqlanishi mumkinligiga e’tibor bering):
public class Exception : ISerializable, _Exception
{
// Ochiq konstruktorlar
public Exception(string message, Exception innerException);
public Exception(string message);
public Exception();
// Metodlar
public virtual Exception GetBaseException ();
public virtual void GetObjectData (Senalizationlnfо info,
StreamingContext context);
// Xossalar
public virtual IDictionary Data { get; }
public virtual string HelpLink { get; set; }
public Exception InnerException { get; }
public virtual string Message { get; }
public virtual string Source { get; set; }
public virtual string StackTrace { get; }
public MethodBase TargetSite { get; }
}
Ko’rib turganingizdek, System.Exception sinfida aniqlangan ko’p xossalar o’z tabiatiga ko’ra faqat o’qishni nazarda tutadi. Buning sababi shundaki, ularning har biri uchun standart qiymatlar odatda voris toifalar tomonidan taqdim etiladi. Masalan, IndexOutOfRangeException toifasining standart xabari “Index was outside the bounds of the array” (“Indeks massiv chegarasidan chiqib ketdi”) ko’rinishida bo’lishi mumkin.
Eslab qoling! Exception sinfi .NETning ikkita interfeysini realizatsiya qiladi: _Exception interfeysi .NETning istisnosiga boshqarilmaydigan kod bazasi (COM ilovasi kabi) tomonidan ishlov berish imkonini beradi, ISerializable interfeysi esa istisno ob’yektiga ma’lum chegaralarni (aytaylik, mashinaning chegarasini) kesib o’tish imkonini beradi.
Quyidagi jadvalda System.Exception sinfining muhim a’zolari tavsiflangan.
Do'stlaringiz bilan baham: |