checked(C# 참조)checked (C# Reference)

checked 키워드는 정수 형식 산술 연산 및 변환에 대한 오버플로 검사를 명시적으로 사용하도록 설정하는 데 사용됩니다.The checked keyword is used to explicitly enable overflow checking for integral-type arithmetic operations and conversions.

상수 값만 포함된 식이 대상 형식의 범위를 벗어난 값을 생성할 경우 기본적으로 이 식에서는 컴파일러 오류가 발생합니다.By default, an expression that contains only constant values causes a compiler error if the expression produces a value that is outside the range of the destination type. 식에 하나 이상의 상수가 아닌 값이 포함된 경우 컴파일러에서는 오버플로를 감지하지 않습니다.If the expression contains one or more non-constant values, the compiler does not detect the overflow. 다음 예제에서 i2에 할당된 식을 계산하면 컴파일러 오류가 발생하지 않습니다.Evaluating the expression assigned to i2 in the following example does not cause a compiler error.

// 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);

기본적으로 이러한 상수가 아닌 식은 런타임에 오버플로가 있는지 검사되지 않고 오버플로 예외를 일으키지 않습니다.By default, these non-constant expressions are not checked for overflow at run time either, and they do not raise overflow exceptions. 이전 예제는 양의 정수 2개의 합계로 -2,147,483,639를 표시합니다.The previous example displays -2,147,483,639 as the sum of two positive integers.

오버플로 검사는 컴파일러 옵션, 환경 구성 또는 checked 키워드 사용을 통해 사용하도록 설정될 수 있습니다.Overflow checking can be enabled by compiler options, environment configuration, or use of the checked keyword. 다음 예제에서는 checked 식 또는 checked 블록을 사용하여 런타임에 이전 합계에 의해 생성되는 오버플로를 감지하는 방법을 보여 줍니다.The following examples demonstrate how to use a checked expression or a checked block to detect the overflow that is produced by the previous sum at run time. 두 예제는 모두 오버플로 예외를 일으킵니다.Both examples raise an overflow exception.

// 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 키워드는 오버플로 검사를 피하는 데 사용될 수 있습니다.The unchecked keyword can be used to prevent overflow checking.

Example

이 샘플에서는 checked를 사용하여 런타임에 오버플로 검사를 사용하도록 설정하는 방법을 보여 줍니다.This sample shows how to use checked to enable overflow checking at run time.

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
 */
}

C# 언어 사양C# language specification

자세한 내용은 C# 언어 사양을 참조하세요.For more information, see the C# Language Specification. C# 언어 사양은 C# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.The language specification is the definitive source for C# syntax and usage.

참고 항목See also