کلیدواژه checked برای فعال سازی صریح بررسی سرریز در تبدیلات و عملیات محاسباتی نوع-صحیح مورد استفاده قرار می گیرد.
بصورت پیش فرض، یک عبارت که تنها شامل مقادیر ثابت است، اگر مقداری که خارج از محدوده نوع مقصد باشد، تولید یک خطای کامپایلری می کند. اگر آن عبارت حاوی یک یا بیش از یک مقدار غیر-ثابت باشد، کامپایلر سرریز را تشخیص نمی دهد. در مثال زیر ارزیابی عبارتی که به i2 انتساب داده شده، سبب تولید خطای کامپایلری نمی شود.
// The following example causes compiler error CS0220 because 2147483647 // is the maximum value for integers. //int i1 = 2147483647 + 10; // The following example, which includes variable ten, does not cause // a compiler error. int ten = 10; int i2 = 2147483647 + ten; // By default, the overflow in the previous statement also does // not cause a run-time exception. The following line displays // -2,147,483,639 as the sum of 2,147,483,647 and 10. Console.WriteLine(i2);
بطور پیش فرض، عبارات غیر-ثابت در زمان اجرا هم برای سرریزی بررسی نمی شوند و آنها خطای سرریزی را برپا نمی کنند. مثال قبل به عنوان حاصل جمع دو عدد صحیح مثبت، 2,147,483,639- را نشان می دهد.
بررسی سرریز را می توان با آپشن های کامپایلر، تنظیمات محیطی یا استفاده از کلمه کلیدی checked، فعال کرد. مثال زیر چگونگی استفاده از یک عبارت یا بلوک بررسی شده (checked) برای کشف سرریزی که پیش تر در عمل جمع در زمان اجرا رخ داد را توضیح می دهد.
// If the previous sum is attempted in a checked environment, an // OverflowException error is raised. // Checked expression. Console.WriteLine(checked(2147483647 + ten)); // Checked block. checked { int i3 = 2147483647 + ten; Console.WriteLine(i3); }
کلمه کلیدی unchecked را می توان برای جلوگیری از بررسی سرریز مود استفاده قرار داد.
مثال
این نمونه چگونگی استفاده از checked برای فعالسازی بررسی سرریز در زمان اجرا را نشان می دهد.
class OverFlowTest { // Set maxIntValue to the maximum value for integers. static int maxIntValue = 2147483647; // Using a checked expression. static int CheckedMethod() { int z = 0; try { // The following line raises an exception because it is checked. z = checked(maxIntValue + 10); } catch (System.OverflowException e) { // The following line displays information about the error. Console.WriteLine("CHECKED and CAUGHT: " + e.ToString()); } // The value of z is still 0. return z; } // Using an unchecked expression. static int UncheckedMethod() { int z = 0; try { // The following calculation is unchecked and will not // raise an exception. z = maxIntValue + 10; } catch (System.OverflowException e) { // The following line will not be executed. Console.WriteLine("UNCHECKED and CAUGHT: " + e.ToString()); } // Because of the undetected overflow, the sum of 2147483647 + 10 is // returned as -2147483639. return z; } static void Main() { Console.WriteLine("\nCHECKED output value is: {0}", CheckedMethod()); Console.WriteLine("UNCHECKED output value is: {0}", UncheckedMethod()); } /* Output: CHECKED and CAUGHT: System.OverflowException: Arithmetic operation resulted in an overflow. at ConsoleApplication1.OverFlowTest.CheckedMethod() CHECKED output value is: 0 UNCHECKED output value is: -2147483639 */ }