مشخصات مقاله
-
1958
-
0.0
-
9882
-
0
-
0
آموزش مدیریت خطا در سی شارپ
کلیه حقوق مادی و معنوی این مقاله متعلق به آموزشگاه تحلیل داده می باشد و هر گونه استفاده غیر قانونی از آن پیگرد قانونی دارد.
آموزش مدیریت خطا در سی شارپ
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
}