Freigeben über


checked (C#-Referenz)

Mit dem checked-Schlüsselwort wird die Überlaufprüfung für arithmetische Vorgänge und Konvertierungen mit ganzzahligen Typen explizit aktiviert.

Ausdrücke, die nur konstante Werte enthalten, verursachen standardmäßig einen Compilerfehler, wenn diese einen Wert außerhalb des Bereichs des Zieltyps erzeugen. Wenn der Ausdruck einen oder mehrere nicht konstante Werte enthält, wird der Überlauf vom Compiler nicht erkannt. Die Auswertung des Ausdrucks, der i2 zugeordnet ist, im folgenden Beispiel erzeugt keinen Compilerfehler.

// 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 wird für nicht konstante Ausdrücke auch zur Laufzeit keine Überlaufprüfung durchgeführt, und es werden keine Überlaufausnahmen ausgelöst. Im vorherigen Beispiel wird -2,147,483,639 als Summe von zwei positiven ganzen Zahlen angezeigt.

Überlaufprüfungen können von Compileroptionen, Umgebungskonfiguration oder mit dem checked-Schlüsselwort aktiviert werden. In den folgenden Beispielen wird veranschaulicht, wie ein checked-Ausdruck oder ein checked-Block verwendet wird, um den Überlauf zu erkennen, der von der vorherigen Summe zur Laufzeit erzeugt wird. In beiden Beispielen wird eine Überlaufausnahme ausgelöst.

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

Mit dem unchecked-Schlüsselwort können Überlaufprüfungen verhindert werden.

Beispiel

In diesem Beispiel wird gezeigt, wie mit checked die Überlaufprüfung zur Laufzeit aktiviert wird.

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#-Programmiersprachenspezifikation

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

Siehe auch

Referenz

C#-Schlüsselwörter

Checked und Unchecked (C#-Referenz)

unchecked (C#-Referenz)

Konzepte

C#-Programmierhandbuch

Weitere Ressourcen

C#-Referenz