تبلیغات
banner
banner
banner
تبلیغات
banner

فیلم های آموزشی : 36 +

تعداد کاربران : 44 +

تعداد کل مطالب : 338 +

تعداد نظرات : 33 +

حضرت محمد (ص) : داناترین مردم کسى است که دانش دیگران را به دانش خود بیفزاید.

آموزش مقدماتی تا پیشرفته سی شارپ بخش صد و پنجاه و ششم


 به نام خداوند جان آفرین حکیم سخن در زبان آفرین



آموزش مقدماتی تا پیشرفته سی شارپ بخش صد و پنجاه و ششم

سلام به همه کاربران وب‌سایت لندلرن

قسمت  صد و پنجاه و ششم


چگونگی یافتن بلاک Catch برای يك استثنا

همانطور که گفتم هنگامی که قسمتی از برنامه با يك استثنا مواجه شد، شيئ  اي از نوع Exception را ايجاد كـرده و بعـد از اينكه اطلاعات مربوط به استثناي به وجود آمده را در آن قرار داد، آن را پرتاب می کند .

سپس اين شيئ پرتـاب شـده مـي توانـد بـه وسيله ي يكي از بلاك هاي catch دريافت شود .

اما بايد به اين نكته توجه كنيد بلاك catch اي كه اين شيئ پرتاب شده را دريافت مي كند، لزوماً نبايد در همان متدي باشد كه حالت استثنا به وجود آمده است .

براي مثال تصور كنيد كه در يك برنامه سه متد به نامهاي A و B و C وجود دارند . متد A متد B را فراخواني مي كند و متد B نيـز متد C را فراخواني مي كند .

حال فرض كنيد كه دستور دوم در متد C با يك استثنا مواجه شود. در اين حالت متـد C شيئ اي از نوع Exception را ايجاد كرده و اطلاعات مربوط به اين استثنا را در آن قرار مي دهد و سـپس آن را پرتـاب مـي كند.

برنامه ابتدا متد C را بررسي مي كند تا ببيند آيا بلاك catch در اين متد وجود دارد كه بتوانـد اسـتثناي بـه وجـود آمـده را كنترل كند؟ در صورتي كه چنين بلاكي در متد C يافته شد، كنترل برنامه به اين بلاك مي رود .

در غير اين صورت شيئ پرتاب شده توسط متد C به متد B خواهد رفت .

درون متد B برنامه مجدداً به دنبال يك بلاك catch مي گردد تا بتواند استثناي بـه وجـود آمده را دريافت و كنترل كند .

همين مراحل براي متد A نيز تكرار مي شود .

اگر در هيچ كدام از متـدهاي A و B و C بلاكـي بـراي كنترل اين استثنا يافته نشد، شيئ پرتاب شده به وسيله ي CLR دريافت مي شود و پيغام خطاي پيش فرض بـراي آن نمـايش داده شده و برنامه بسته مي شود

كلاس Exception:

براي اين كه رخ دادن يك استثنا اعلام شود، بايد اطلاعات مربوط به اين استثنا در شيئ اي خاص قـرار بگيـرد و سـپس ايـن شـيئ پرتاب شود.

اين شيئ بايد از كلاس Exception و يا يكي از كلاسهاي مشتق شده از آن، نمونه سازي شده باشد .

هنگامي كه يكي از كلاسهاي NET .با يك استثنا مواجه شود، بسته به نوع آن استثنا يك شيئ مناسب را ايجاد كرده و پرتاب مي كند.

براي مثال اگر پارامتر نادرستي به اين متد فرستاده شود شيئ از كلاس ArgumentException توليد و پرتاب مي شــود.

اگــر آدرس فايــل و يــا دايركتــوري كــه بــه ايــن متــد فرســتاده شــده اســت وجــود نداشــته باشــد، شــيئ اي از كــلاس DirectoryNotFoundException و يا FileNotFoundException ايجـاد شـده و پرتـاب مي شود .

تمام كـلاس هـايي كـه بـراي اعـلام يـك اسـتثنا توسـط NET .مـورد اسـتفاده قـرار مـي گيرنـد، از كلاسـي بـه نـام SystemException مشتق شده اند.

اما همانطور كه گفتم فقط NET. نيست كه مي تواند رخ دادن يك استثنا را اعلام كند .

بلكه برنامه نويس نيز اگر در كلاس هـايي كه طراحي مي كند با يك استثنا مواجه شد، مي تواند از اين روش استفاده كند .

براي مثال طراحي كلاس Car در قسمتهای قبلی را بـه خطر بياوريد .

خاصيت NumberOFDoors در اين كلاس فقط مي تواند اعداد دربازه ي ۱ تا ۶ را قبول كنـد .

بنـابراين مـي توانيــد عــدد فرســتاده شــده بــه ايــن خاصــيت را بررســي كــرده و اگــر خــارج از ايــن محــدوده بــود، شــيئ اي را از كــلاس ArgumentOutOfRangeException ايجاد كرده و آن را پرتاب كنيد و به اين وسيله رخ دادن يـك اسـتثنا در اين كلاس را اعلام كنيد .

اگر هم هيچ يك از كلاسهاي موجود در NET .براي استثناي به وجود آمده در كلاس شما مناسب نبود، مي توانيـد خودتـان يـك كلاس براي اين استثنا ايجاد كنيد و سپس شيئ اي را از آن نمونه سازي كرده و پرتاب كنيد .

البته اين كلاس حتمـاً بايـد از كـلاس ApplicationException مشتق شده باشد .

اگر بخواهم مطالب بالا را دسته بندي كنم، بايد بگويم كه اشيايي كه هنگام رخ دادن يك استثنا به وجود آمـده و پرتـاب مـي شـوند، حتماً بايد از كلاس Exception و يا يكي از كلاس هاي مشتق شده از آن نمونه سازي شوند.

از كلاس Exception دو كلاس كلي به نامهاي SystemException و ApplicationException مشتق مي شوند. حال اگر يكي از كلاسهاي دروني NET .با استثنا مواجه شد، آن كلاس براي اعلام رخ دادن اسـتثنا از يكـي از كلاسـهاي مـشتق شـده از كـــــــــلاس SystemException ماننـــــــــد كـــــــــلاس ArgumentException و يـــــــــا FileNotFoundException استفاده مي كند .

اما اگر كلاسي كه در برنامه طراحي كرده ايم با اسـتثنا مواجـه شـد، هم مي توانيم مانند NET ،.از كلاسهاي مشتق شده از SystemException استفاده كنيم و هـم مـي تـوانيم كـلاس جديدي را از كلاس ApplicationException مشتق كـرده و از آن بـراي اعـلام رخ دادن اسـتثنا اسـتفاده كنـيم.

ادامه دوره را در قسمت صد و پنجاه و هفتم دنبال کنید.


درباره نویسنده
سجاد اسدی
   سجاد اسدی

سجاد اسدی هستم دانشجوی رشته نرم افزار و علاقه مند به تدریس و یادگیری دروس مرتبط با تکنولوژی نرم افزار و اینترنت اشیاء جهت ارتباط با بنده مراجعه شود به آیدی سروش و تلگرام : @ordervira و پیج بنده در اینستاگرام instagram.com/sajjadred11 ""اللهم صل علی محمد و آل محمد"" برای شروع هیچ وقت دیر نیست. "الهم عجل لولیک الفرج"

دیدگاه بگذارید

avatar
  اشتراک  
اطلاع رسانی

aparat کانال آپارات

soroush کانال سروش

کانال آی گپ