مدیریت خطا (Exception Handling) در زبان سی شارپ – آموزش زبان سی شارپ

csharp exception handling 4557 تصویر

مدیریت خطا (Exception Handling) در زبان سی شارپ

استثنا (Exception) مشکلی است که در طول اجرای یک برنامه رخ می دهد. در زبان برنامه نویسی C#، استثنا یک پاسخ به شرایط غیر منتظره ای است که در هنگام اجرای یک برنامه ممکن است رخ دهد. مانند تلاش برای تقسیم یک عدد بر صفر.

استثنا امکان انتقال کنترل اجرای برنامه از محلی به محل دیگر را فراهم می کند. در زبان سی شارپ برای مدیریت استثناها از کلمات کلیدی زیر استفاده می شود:

  • try : بلوک کدی را مشخص می کند که ممکن است در هنگام اجرا شدن، باعث بوجود آمدن استثنا شود.
  • catch : استثناهایی که ممکن است در بلوک try رخ دهند توسط این بخش مدیریت می شوند (به اصطلاح گرفته می شوند).
  • finally : کدهای قرار گرفته در این بلوک در هر شرایطی اجرا می شوند.
  • throw : هنگامی که در اجرای برنامه خطای رخ می دهد، با استفاده از کلمه کلیدی throw می توان استثنای مرتبط با خطا را تولید می کند.

سینتکس

اگر فرض کنیم که یک متد قرار است یک استثنا ایجاد کند، با استفاده از بلوک try/catch می توانیم این استثنا را مدیریت کنیم. در زیر سینتکس کلی یک بلوک try/catch را مشاهده می کنید:

try {
   // statements causing exception
} catch( ExceptionName e1 ) {
   // error handling code
} catch( ExceptionName e2 ) {
   // error handling code
} catch( ExceptionName eN ) {
   // error handling code
} finally {
   // statements to be executed
}

همان طور که در سینتکس فوق مشاهده می کنید، به منظور مدیریت استثناهای مختلف می توان چندین بخش catch برای بلوک try/catch تعریف کرد.

کلاس های استثنا در زبان سی شارپ

در زبان برنامه نویسی C# استثناها توسط کلاس ها نمایش داده می شوند. هر کلاسی که مربوط به یک استثنا است، به طور مستقیم یا غیر مستقیم از کلاس System.Exception مشتق شده است. برای مثال کلاس های استثنای System.ApplicationException و System.SystemException از کلاس System.Exception مشتق شده اند.

کلاس System.ApplicationException برای استثناهایی است که توسط برنامه کاربردی تولید می شوند. بنابراین استثناهایی که توسط برنامه نویس ایجاد می شوند، باید از این کلاس مشتق شوند. کلاس System.SystemException کلاس پایه برای تمام استثناهای پیشفرض سیستم می باشد.

در جدول زیر برخی از استثناهای از پیش تعریف شده که از کلاس System.Exception مشتق شده اند را مشاهده می کنید:

ردیف توضیحات
۱ System.IO.IOException

مدیریت خطاهای مربوط به I/O

۲ System.IndexOutOfRangeException

مدیریت خطاهایی که هنگام تلاش برای دسترسی به عنصری که در رنج یک آرایه نیست رخ می دهند.

۳ System.ArrayTypeMismatchException

مدیریت خطاهایی که در زمان مشابه نبودن نوع آرایه با نوع داده رخ می دهند.

۴ System.NullReferenceException

مدیریت خطاهایی که از هنگام اشاره به یک شیء null رخ می دهند.

۵ System.DivideByZeroException

مدیریت خطاهایی که از هنگام تقسیم یک عدد بر صفر رخ می دهند.

۶ System.InvalidCastException

مدیریت خطاهایی که از هنگام تبدیل نوع رخ می دهند.

۷ System.OutOfMemoryException

مدیریت خطاهایی که از هنگام کمبود حافظه رخ می دهند.

۸ System.StackOverflowException

مدیریت خطاهایی که از هنگام سرریز شدن پشته رخ می دهند.

مدیریت استثناها

زبان برنامه نویسی سی شارپ در قالب بلوک try/catch یک راه حل ساخت یافته برای پردازش استثناها فراهم می کند. با استفاده از این بلوک ها دستورات اصلی از دستورات مربوط به پردازش خطاها جدا می شوند.

این بلوک مدیریت خطا با استفاده از کلمات کلیدی try، catch و finally پیاده سازی می شوند. در مثال زیر چون تلاش می شود تا یک عدد را بر صفر تقسیم کنیم، استثنای DivideByZeroException رخ می دهد:

using System;
namespace ErrorHandlingApplication {
   class DivNumbers {
      int result;
      
      DivNumbers() {
         result = 0;
      }
      public void division(int num1, int num2) {
         try {
            result = num1 / num2;
         } catch (DivideByZeroException e) {
            Console.WriteLine("Exception caught: {0}", e);
         } finally {
            Console.WriteLine("Result: {0}", result);
         }
      }
      static void Main(string[] args) {
         DivNumbers d = new DivNumbers();
         d.division(25, 0);
         Console.ReadKey();
      }
   }
}

امتحان کنید

زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:

Exception caught: System.DivideByZeroException: Attempted to divide by zero.
at ...
Result: 0

تعریف استثنا توسط کاربر

شما می توانید در صورت نیاز استثناهای خود را ایجاد کنید. استثناهای ایجاد شده توسط کاربر باید از کلاس Exception مشتق شوند. مثال زیر نحوه ساخت یک استثنا را نشان می دهد:

using System;
namespace UserDefinedException {
   class TestTemperature {
      static void Main(string[] args) {
         Temperature temp = new Temperature();
         try {
            temp.showTemp();
         } catch(TempIsZeroException e) {
            Console.WriteLine("TempIsZeroException: {0}", e.Message);
         }
         Console.ReadKey();
      }
   }
}
public class TempIsZeroException: Exception {
   public TempIsZeroException(string message): base(message) {
   }
}
public class Temperature {
   int temperature = 0;
   
   public void showTemp() {
      
      if(temperature == 0) {
         throw (new TempIsZeroException("Zero Temperature found"));
      } else {
         Console.WriteLine("Temperature: {0}", temperature);
      }
   }
}

زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:

TempIsZeroException: Zero Temperature found

تولید استثنا

اگر یک شیء به طور مستقیم یا غیر مستقیم از کلاس System.Exception مشتق شده باشد، می توانید آن را با استفاده از کلمه کلیدی throw و به عنوان یک استثنا پرتاب کنید. مانند مثال زیر:

catch(Exception e) {
...
throw e
}

نوشته مدیریت خطا (Exception Handling) در زبان سی شارپ – آموزش زبان سی شارپ اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.

درباره نویسنده: administrator

ممکن است دوست داشته باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *