نمایش نتایج 1 تا 2 از 2

نام تاپیک: مقدمه ای بر سی شارپ : قسمت- 19

  1. #1
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    ایران - تهران
    پست
    2,342

    مقدمه ای بر سی شارپ : قسمت- 19

    مقابله با خطاها در سی شارپ (Exception Handling in C#‎)

    EXCEPTION یک خطای زمان اجر است که بدلیل شرایطی غیرنرمال در برنامه ایجاد می شود. در سی شارپ exeption کلاسی است در فضای نام سیستم. شیء ایی از نوع exception بیانگر شرایطی است که سبب رخ دادن خطا در کد شده است. سی شارپ از exception ها به صورتی بسیار شبیه به جاوا و سی پلاس پلاس استفاده می نماید.

    دلایلی که باید در برنامه exception handling حتما صورت گیرد به شرح زیر است:
    - قابل صرفنظر کردن نیستند و اگر کدی این موضوع را در نظر نگیرد با یک خطای زمان اجرا خاتمه پیدا خواهد کرد.
    - سبب مشخص شدن خطا در یک نقطه از برنامه شده و ما را به اصلاح آن سوق می دهد.


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


    class A {static void Main() {catch {}}} 
    TEMP.cs(3,5): error CS1003: Syntax error, 'try' expected

    class A {static void Main() {finally {}}}
    TEMP.cs(3,5): error CS1003: Syntax error, 'try' expected

    class A {static void Main() {try {}}}
    TEMP.cs(6,3): error CS1524: Expected catch or finally


    بهتر است یک مثال ساده را در این زمینه مرور کنیم:

    int a, b = 0 ;
    Console.WriteLine( "My program starts " ) ;
    try
    {
    a = 10 / b;
    }
    catch ( Exception e )
    {
    Console.WriteLine ( e ) ;
    }
    Console.WriteLine ( "Remaining program" ) ;
    The output of the program is:
    My program starts
    System.DivideByZeroException: Attempted to divide by zero.
    at ConsoleApplication4.Class1.Main(String[&#9 3; args) in
    d:\dont delete\consoleapplication4\class1.cs:line 51
    Remaining program


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

    تعدادی از کلاس های exception در سی شارپ که از کلاس System.Exception ارث برده اند به شرح زیر هستند :

    •	Exception Class - - Cause 
    • SystemException - A failed run-time check;used as a base class for other.
    • AccessException - Failure to access a type member, such as a method or field.
    • ArgumentException - An argument to a method was invalid.
    • ArgumentNullException - A null argument was passed to a method that doesn't accept it.
    • ArgumentOutOfRangeException - Argument value is out of range.
    • ArithmeticException - Arithmetic over - or underflow has occurred.
    • ArrayTypeMismatchException - Attempt to store the wrong type of object in an array.
    • BadImageFormatException - Image is in the wrong format.
    • CoreException - Base class for exceptions thrown by the runtime.
    • DivideByZeroException - An attempt was made to divide by zero.
    • FormatException - The format of an argument is wrong.
    • IndexOutOfRangeException - An array index is out of bounds.
    • InvalidCastExpression - An attempt was made to cast to an invalid class.
    • InvalidOperationException - A method was called at an invalid time.
    • MissingMemberException - An invalid version of a DLL was accessed.
    • NotFiniteNumberException - A number is not valid.
    • NotSupportedException - Indicates sthat a method is not implemented by a class.
    • NullReferenceException - Attempt to use an unassigned reference.
    • OutOfMemoryException - Not enough memory to continue execution.
    • StackOverflowException - A stack has overflown.


    در کد فوق صرفا عمومی ترین نوع از این کلاس ها که شامل تمامی این موارد می شود مورد استفاده قرار گرفت یعنی :

    catch ( Exception e )


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


    مثالی دیگر: ( در این مثال خطایابی دقیق تر با استفاده از کلاس های فوق و همچنین مفهوم finally نیز گنجانده شده است )


    int a, b = 0 ;
    Console.WriteLine( "My program starts" ) ;
    try
    {
    a = 10 / b;
    }
    catch ( InvalidOperationException e )
    {
    Console.WriteLine ( e ) ;
    }
    catch ( DivideByZeroException e)
    {
    Console.WriteLine ( e ) ;
    }
    finally
    {
    Console.WriteLine ( "finally" ) ;
    }
    Console.WriteLine ( "Remaining program" ) ;
    The output here is:
    My program starts
    System.DivideByZeroException: Attempted to divide by zero.
    at ConsoleApplication4.Class1.Main(String[&#9 3; args) in
    d:\dont delete\consoleapplication4\class1.cs:line 51
    finally
    Remaining program


    قسمت موجود در قطعه ی فاینالی همواره صرفنظر از قسمت های دیگر اجرا می شود.

    به مثال زیر دقت کنید :

    int a, b = 0 ;
    Console.WriteLine( "My program starts" )
    try
    {
    a = 10 / b;
    }
    finally
    {
    Console.WriteLine ( "finally" ) ;
    }
    Console.WriteLine ( "Remaining program" ) ;
    Here the output is
    My program starts
    Exception occurred: System.DivideByZeroException:
    Attempted to divide by zero.at ConsoleApplication4.Class1.
    Main(String[] args) in d:\dont delete\consoleapplication4
    \class1.cs:line 51
    finally


    قسمت چاپ Remaining program اجرا نشده است.

    عبارت throw :

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

    مثال :

    int a, b = 0 ;
    Console.WriteLine( "My program starts" ) ;
    try
    {
    a = 10 / b;
    }
    catch ( Exception e)
    {
    throw
    }
    finally
    {
    Console.WriteLine ( "finally" ) ;
    }


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

  2. #2
    کاربر دائمی آواتار kablayi
    تاریخ عضویت
    بهمن 1383
    محل زندگی
    شیراز
    پست
    773
    :موفق:

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •