دستورات سیشارپ، میتوانند به صورت checked و unchecked اجرا شوند.
برای درک کاربرد این دو عملگر و روش استفاده از آنها، ابتدا به مثال زیر دقت کنید:
byte a = 255; a++; byte b = 255; b += 2; // a = 0 // b = 1
همانطور که میدانید، نوع بایت فقط میتواند شامل عددی بین 0 تا 255 باشد؛ و در کد بالا که مقدار بایت از 255 زیاد شده است، موجب سر ریز خواهد شد و مقدار بایت، از ابتدای بازه مجددا شروع میشود. پس برای جلوگیری از این ریسک، به روشهایی نیاز داریم تا بتوانیم آن را مدیریت کرده و مطئن شویم که نتیجهی مدنظرمان را به دست میآوریم. (البته اگر احتمال رخ دادن سر ریز بود، بهتر است از این روشها استفاده کنیم؛ در غیر اینصورت نیازی به حساسیت وجود ندارد).
سی شارپ برای مدیریت سرریز، دو کلیدواژهی checked و unchecked را در اختیارمان قرار داده است.
کلمه کلیدی chceked
در صورتی که یک بخش از کد به صورت checked نوشته شود، CLR سرریز شدن کد را بررسی کرده و در صورت رخ دادن چنین چیزی، خطای OverflowException تولید میکند.
byte b = 255; checked { b++; }
با اجرای کد بالا، با خطا مواجه خواهید شد:
پس میتوانیم با استفاده از try و catch، خطا را مدیریت کنیم.
کلمه کلیدی unchecked
و اگر بخواهیم بررسی سرریز صورت نگرفته و خطایی تولید نشود، از عملگر unchecked استفاده میکنیم:
byte b = 255; unchecked { b++; }
البته این عملگر بدون نوشتن آن نیز به صورت پیشفرض کار میکند؛ اما فرض کنید بخواهیم قسمتی از یک بخش checked را unchecked درنظر بگیریم! پس در این صورت از این روش استفاده میشود.
نکته
دو روش دیگر نوشتن و استفاده از عملگرهای بالا نیز به صورت زیر میباشد:
byte a = 255; byte b = checked(a++);
یعنی اینکه به جای { } باز و بسته، از یک ( ) باز و بسته استفاده شود و خروجی کد نوشته شده در بین پرانتزها، به بیرون برگردانده شود.
ممنون