مدیریت OverFlow در سی شارپ

مدیریت OverFlow در سی شارپ

به طور پیشفرض زبان سی شارپ درشرایطی از صدور خطاهای مربوط به سرریز شدن چشم پوشی میکند برای جلوگیری از از این رفتار میتوان با دستوراتی به کامپایلر اعلام کنیم که درصورت بروز سرریز خطایی صادر کند. به طور خلاصه، دستور checked در زبان برنامه‌نویسی C# برای کنترل و مدیریت خطاهای حاصل از تبدیل‌های ناامن (overflow) در عملیات‌های عددی استفاده می‌شود. وقتی از checked استفاده می‌کنیم، برنامه در صورت بروز خطا (مانند تبدیل‌های بیش از حد بزرگ یا کوچک) خودکار متوقف می‌شود و اجرای برنامه ادامه نمی‌یابد.

برای مثال، اگر داشته باشیم

int a = 100000000;
int b = 100000;

// بدون checked، این عملیات باعث overflow می‌شود
int result = a * b;
Console.WriteLine(result); //  نتیجه نادرست: 1316134912

// با checked، برنامه در صورت overflow متوقف می‌شود
checked
{
    int safeResult = a + b;
    Console.WriteLine(safeResult); // خطا: System.OverflowException
}

 

در مثال بالا، بخشی از کد با checked نوشته شده است. اگر این بخش را اجرا کنید، خطای System.OverflowException دریافت خواهید کرد. این نشان‌دهنده‌ی این است که عملیات جمع باعث overflow شده است و برنامه به درستی از این خطا مطلع شده است.

به طور کلی، استفاده از checked در مواردی که ممکن است عملیات‌های عددی به overflow منجر شوند، توصیه می‌شود تا از خطاهای ناخواسته جلوگیری کنیم

درمقابل دستور unchecked در زبان برنامه‌نویسی C# برای کنترل و مدیریت خطاهای حاصل از تبدیل‌های ناامن (overflow) در عملیات‌های عددی استفاده می‌شود. وقتی از unchecked استفاده می‌کنیم، برنامه در صورت بروز خطا (مانند تبدیل‌های بیش از حد بزرگ یا کوچک) خودکار ادامه می‌یابد و هیچ استثنا ایجاد نمی‌شود. به جای ایجاد استثنا، نتیجه عملیات به صورت تراکم شده (با حذف بیت‌های بالایی که در نوع مقصد جا نمی‌گیرند) نمایش داده می‌شود.

برای مثال، در کد زیر

int a = int.MaxValue;
int b = 1;

// بدون unchecked، این عملیات باعث overflow می‌شود
int result = a + b;
Console.WriteLine(result); // نتیجه نادرست: -2147483648

// با unchecked، برنامه ادامه می‌یابد
unchecked
{
    int safeResult = a + b;
    Console.WriteLine(safeResult); // نتیجه: 2
}

در مثال بالا، بخشی از کد با unchecked نوشته شده است. اگر این بخش را اجرا کنید، نتیجه‌ی عملیات جمع به صورت بدون خطا نمایش داده می‌شود. این کلیدواژه مفید است زمانی که می‌خواهیم از خطاهای ناخواسته در عملیات‌های عددی جلوگیری کنیم

مرتضی جنگجو

برنامه نویس fullstack با بیش از 14 سال سابقه کار و همکاری در توسعه و پیاده سازی نرم افزارهای تحت وب با تکنولوژی Net. در شرکتهای بزرگ ایرانی، هلندی، فنلاندی و ترکیه

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

دیدگاه کاربران

مطالب مرتبط