دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۲۵
  • مرداد

جلسه ۴۳ : نحوه مدیریت استثناء ها در #C

  • دسته‌بندی‌ها :
جلسه ۴۳ : نحوه مدیریت استثناء ها در #C
    • جزئیات
    • نوع محتواآموزش تصویری

      مقدمه :

      با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، با دوره کامل آموزش #C در خدمت شما دوستان هستیم. در بخش قبلی به معرفی استثناء ها و کلاس Exception در زبان #C پرداختیم. در این بخش قصد داریم شما را با نحوه مدیریت استثناء ها در #C آشنا کنیم.

      اگر یک خطا در برنامه وجود داشته باشد، استثناء هایی توسط CLR یا کد برنامه اجرا می شوند. این استثناء ها باید برای جلوگیری از سقوط (Crash) برنامه مورد استفاده قرار گیرند. در #C برای مدیریت خطاها در برنامه میتوان از بلوک های try, catch & finally استفاده کرد.

      ساختار کلی :

      مثال : 

      همانطور که در کدهای بالا مشاهده می کنید، کدهایی را در بلوک try قرار دهید که ممکن است یک استثنا را ایجاد کنند و سپس آن را با یک بلوک catch یا finally به پایان برسانید.

      بیایید ببینیم چگونه از بلوک try & catch برای رسیدگی به استثنا استفاده کنیم. کد زیر را که می تواند یک استثنا را برگرداند ، در نظر بگیرید.

      مثال : 

      در مثال فوق، فرض کنید متد FindAllStudentFromDatabase لیست دانشجویانی که نام آنها توسط کاربر تعیین می شود را از پایگاه داده می گیرد.

      در مثال بالا اگر حداقل یک دانش آموز وجود داشته باشد مشکلی پیش نخواهد آمد، در غیر این صورت کامپایلر استثناء NullReferenceException را برمی گرداند . اما شاید نخواهیم برنامه متوقف شود و پیام استثناء به کاربر نمایش داده شود. پس، با استفاده از بلوک try اینکار را انجام میدهیم مانند مثال زیر :

      مثال : 

      همانطور که در مثال بالا می بینید، اگر تعداد studentList صفر باشد دستور studentList.Count می تواند یک استثناء را برگرداند. بنابراین این کد را در بلوک try قرار دهید. حال اگر بلوک try به خطا برخورد کند ، برنامه crash نشده و از آن خارج نمی شویم در اینصورت کامپایلر بلوک catch را اجراء کرده و دستورالعمل مناسب را که خودمان تعیین کرده ایم در صورت بروز خطا اجراء میکند.

      نکته : بلوک try حتما باید بهمراه بلوک catch یا finally و یا هردو باهم استفاده شود و در غیر اینصورت خطای زمان کامپایل برگشت داده می شود.

       

      بلوک catch :

      اگر کامپایلر در اجرای کدهای درون بلوک try با خطا مواجه شود کدهای در بلوک catch را اجراء می کند پس بلوک catch تنها زمانی اجرا می شود که یک استثناء رخ دهد.

      میتوان از چند بلوک catch جداگانه برای مدیریت خطا استفاده کرد، این بلوک های catch چندگانه Exception Filter ها نامیده می شوند. این روش وقتی استفاده می شود که شما می خواهید با بروز خطاهای مختلف از دستورالعمل مربوط به همان خطایی خاص را اجراء کنید.

      مثال : 

      در مثال بالا، یک بلوک catch چندگانه با انواع استثنائات مختلف را مشخص کردیم، به این ترتیب میتوانیم بسته به نوع خطا که پیام مناسب را به کاربر نشان دهیم تا کاربر یک اشتباه مشابه را دوباره تکرار نکند.

       

      بلوک های catch نامعتبر :

      در یک بلوک try – catch نمیتوان از یک بلوک catch بدون پارامتر و یک بلوک catch با پارامتر Exception استفاده کرد، زیرا آنها هر دو یک کار را انجام می دهند.

      مثال : 

      برای استفاده از بلوک های catch چندگانه توجه داشته باشید که بلوک catch بدون پارامتر را در آخر قرار دهیم.

      مثال : 

       

      بلوک finally :

      بلوک finally باید پس از بلوک try یا catch قرار بگیرد. بلوک finally همیشه اجراء خواهد شد حتی اگر خطایی رخ ندهد!. بلوک finally به طور کلی برای تمیز کردن کد مورد استفاده قرار می گیرد.

      مثال : 

      مثال : 

       

      توجه : بلوک های finally چندگانه مجاز نیستند همچنین، در بلوک finally نمی توان از کلمات کلیدی continue، return یا break استفاده کرد.

       

      بلوک try – catch تودرتو :

      #C اجازه می دهد بلوک های try – catch تودرتو ایجاد کنید . مانند مثال زیر :

      مثال : 

      خروجی :

      مثال : 

      اگر هیچ بلوک catch درونی با نوع استثنای مناسب وجود نداشته باشد، پس از آن استثناء به بلوک catch خارجی وارد می شود تا زمانی که فیلتر مناسب خطا آن را مدیریت کند . مثال زیر را در نظر بگیرید:

      مثال : 

      خروجی :

      مثال : 

      در مثال بالا استثناء NullReferenceException برگشت داده می شود ، اما هیچ بلوک catch ای این نوع خطا را مدیریت نمی کند بنابراین خطا به catch بیرونی انتقال پیدا می کند و در ادامه این خطا در بلوک catch کلی مدیریت می شود.

       

      چند نکته مهم جهت بخاطر سپاردن :

      1. برای مدیریت خطاها در زبان #C از بلوک های try – catch – finally میتوان استفاده کرد.
      2. بلوک try حتما باید بهمراه بلوک catch یا finally و یا هردو استفاده شود.
      3. استفاده از چند بلوک catch مجاز است بشرطی که هرکدام فیلترهای متفاوتی را مدیریت کنند و بلوک catch کلی در آخر بیاید.
      4. استفاده از بلوک catch کلی و بلوک catch(Exception ex) در کنار هم غیر مجاز است.
      5. بلوک finally باید بعد از بلوک try یا بلوک catch بیاید.
      6. بلوک finally همیشه اجراء میشود حتی اگر بلوک catch اجراء نشود و یا حتی اگر خطایی نداشته باشیم.
      7. بلوک finally مکان مناسبی برای dispose کردن اشیاء است.
      8. در بلوک finally نمی توان از کلمات کلیدی continue، return یا break استفاده کرد.
      9. استفاده از بلوک try – catch تودرتو مجاز است.
      10. در صورتیکه در بلوک catch داخلی فیلتر مناسب یافت نشود ، خطا به بلوک catch بیرونی منتقل می شود.

       

      در این بخش با نحوه مدیریت خطاها با استفاده از بلوک try – catch – finally آشنا شدید.

      در قسمت بعد قصد داریم نحوه مدیریت دقیق تر و دستی خطاها را با استفاده از کلمه کلیدی throw بیان کنیم.

      QR:  جلسه ۴۳ : نحوه مدیریت استثناء ها در #C
      به اشتراک بگذارید