کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش مدیریت خطا در سی شارپ

دوره آموزش برنامه نویسی C#

کلیه حقوق مادی و معنوی این مقاله متعلق به آموزشگاه تحلیل داده می باشد و هر گونه استفاده غیر قانونی از آن پیگرد قانونی دارد.

آموزش مدیریت خطا در سی شارپ

C# اکسپشن گردانی

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

 اکسپشن ها راهی برای انتقال کنترل از یک بخش به بخش دیگری از برنامه ارائه می دهد.

 C# - exception handling بر پایه ی چهار کلمه ی کلیدی try، catch، finally و throw ساخته می شود.

Try

یک بلوک try بلوکی از کدها را شناسایی می کند که برای اکسپشن های خاص فعال خواهند شد. Try با یک یا بیشتر از یک بلوک catch دنبال می شود.

 Catch

یک برنامه یک اکسپشن را با exception handler، در مکانی که به مشکل رسیدگی می کنید، می گیرد. کلمه ی کلیدی catch نشان دهنده ی catching یک اکسپشن می باشد.

 Finally

بلوک finally برای اجرای مجموعه ی ارائه شده از بیانیه ها استفاده می شود، چه یک اکسپشن پرتاب شود چه نشود. برای مثال اگر شما فایلی را بااز کنید، باید بسته شود چه اکسپشن وجود داشته باشد یا نه.

 Throw

یک برنامه زمانی که مشکلی نمایان شود، استثنائی را شکل می دهد. این کار با کلمه ی کلیدی throw انجام می شود.

Syntax

پذیرفتن بلوک منجر به ایجاد یک اکسپشن خواهد شد، یک متود یک اکسپشن را با استفاده از ترکیب کلمات کلیدی try و catch می گیرد. یک بلوک try/code در اطراف برنامه جای می گیرد که ممکن است یک اکسپشن تولید کند. کد داخل بلوک 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 را برای انواع مختلف catch  از اکسپشن ها در مورد بلوک امتحان شده ی شما لیست کنید، که در مقعیت های مختلف بیشتر از یک اکسپشن را ایجاد می کند.

 گروه های اکسپشن در C#

اکسپشن های C# در گروه ها نمایش داده می شوند. گروه های یکسپشن در C# به طور مستقیم یا غیر مستقیم از گروه System.Exception ‏ ‏ استخراج می شوند. برخی از گروه های اکسپشن استخراج شده از این گروه System.ApplicationException ‏ و System.SystemException می باشند.

گرووه System.ApplicationException اکسپشن های تولید شده توسط برنامه های کاربدی را پشتیبانی می کند. بنابراین اکسپشن ها تعریف شده توسط این برنامه نویسان باید از این گروه استخراج شوند.

گروه System.SystemException گروه پایه برای همه ی اکسپشن های از پیش تعریف شده ی سیستم می باشد. جدول زیر برخی از گروه های از پیش تعریف شده ی اکسپشن را که از گروه System.SystemException استخراج شده اند، ارائه می دهد.

 Exception Class

Description

System.IO.IOException

به خطاهای l/O رسیدگی می کند

System.IndexOutOfRangeException

به خطاهایی رسیدگی می کند که زمانی تولید می شوند که یک روش به یک شاخص array خارج از محدوده اشاره می کند

System.ArrayTypeMismatchException

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

System.NullReferenceException

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

System.DivideByZeroException

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

System.InvalidCastException

یه خطاهایی رسیدگی می کند که در طول typecasting تولید می شوند.

System.OutOfMemoryException

به خطاهایی رسیدگی می کند که به علت کمبود حافظه ی خالی به وجود می آیند.

System.StackOverflowException

به خطاهایی رسیدگی می کند که از stack overflow تولید می شوند.

 

 پردازش اکسپشن ها

C# یک راه حل دارای ساخت برای رسیدگی به مشکلات اکسپشن ، به شکل بلوک های try و catch ارائه می دهد. با استفاده از این بلوک ها بیانیه های برنامه ی هسته از برنامه های error handling  مجزا می شوند.

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

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

ایجاد اکسپشن های ایجاد شده توسط کاربر

 شما می توانید اکسپشن خود را ایجاد کنید. گروه های اکسپشن تعریف شده توسط کاربر از گروه ApplicationException استخراج می شود. مثال زیر این مطلب را توضیح می دهد.

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: ApplicationException
        {
          
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

 

Throwing objects

 شما می توانید آبجکتی را که به طور مستقیم یا غیر مستقیم از گروه System.Exception استخراج شده، throw کنید. می توانید در بلوک catch  از throw statement استفاده کنید تا آبجکت موجود را مانند زیر throw کنید.

Catch(Exception e)
        {
           ...
           Throw e
        }
1394/07/27 9879 1956
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...