checked (C#-Referenz)checked (C# Reference)

Das Schlüsselwort checked wird verwendet, um eine Überlaufüberprüfung bei arithmetischen Operationen für ganzzahlige Typen und Konvertierungen explizit zu aktivieren.The checked keyword is used to explicitly enable overflow checking for integral-type arithmetic operations and conversions.

Standardmäßig bewirkt ein Ausdruck, der nur konstante Werte enthält, einen Compilerfehler, wenn der Ausdruck einen Wert erzeugt, der außerhalb des Bereichs des Zieltyps liegt.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. Wenn der Ausdruck einen oder mehrere nicht konstante Werte enthält, erkennt der Compiler den Überlauf nicht.If the expression contains one or more non-constant values, the compiler does not detect the overflow. Die Auswertung des Ausdrucks, der im folgenden Beispiel i2 zugewiesen ist, verursacht keinen Compilerfehler.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);

Standardmäßig werden diese nicht konstanten Ausdrücke zur Laufzeit auch nicht auf Überläufe überprüft und lösen keine Überlaufausnahmen aus.By default, these non-constant expressions are not checked for overflow at run time either, and they do not raise overflow exceptions. Das vorherige Beispiel zeigt -2,147,483,639 als Summe von zwei ganzen Zahlen.The previous example displays -2,147,483,639 as the sum of two positive integers.

Die Überlaufüberprüfung kann durch Compileroptionen, Umgebungskonfiguration oder Verwendung des checked-Schlüsselworts aktiviert werden.Overflow checking can be enabled by compiler options, environment configuration, or use of the checked keyword. In den folgenden Beispielen wird veranschaulicht, wie Sie einen checked-Ausdruck oder einen checked-Block verwenden, um den Überlauf zu erkennen, der von der vorherigen Summe zur Laufzeit erzeugt wird.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. In beiden Beispielen wird eine Überlaufausnahme ausgelöst.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);
}

Das unchecked-Schlüsselwort kann verwendet werden, um die Überlaufüberprüfung zu verhindern.The unchecked keyword can be used to prevent overflow checking.

BeispielExample

Dieses Beispiel zeigt, wie mit checked die Überlaufüberprüfung zur Laufzeit aktiviert wird.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#-ProgrammiersprachenspezifikationC# Language Specification

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Siehe auchSee Also

C#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide
C#-SchlüsselwörterC# Keywords
AKtiviert und nicht aktiviertChecked and Unchecked
uncheckedunchecked