checked (référence C#)
Le mot clé checked sert à activer explicitement le contrôle de dépassement pour les opérations arithmétiques de type entier et les conversions.
Par défaut, une expression qui contient uniquement des valeurs constantes provoque une erreur de compilateur si l'expression produit une valeur qui est à l'extérieur de la plage du type de destination. Si l'expression contient une ou plusieurs valeurs non constantes, le compilateur ne détecte pas le dépassement de capacité. L'évaluation de l'expression assignée à i2 dans l'exemple suivant ne provoque pas d'erreur du compilateur.
// 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);
Par défaut, le dépassement de capacité éventuel au moment de l'exécution de ces expressions non constantes n'est pas vérifié, et elles ne déclenchent pas d'exceptions de dépassement de capacité. L'exemple précédent affiche -2,147,483,639 comme somme de deux entiers positifs.
Le contrôle de dépassement peut être activé par les options du compilateur, la configuration de l'environnement ou l'utilisation du mot clé checked. Les exemples suivants montrent comment utiliser une expression checked ou un bloc checked pour détecter le dépassement de capacité produit par la somme précédente au moment de l'exécution. Les deux exemples déclenchent une exception de dépassement de capacité.
// 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);
}
Le mot clé unchecked peut être utilisé pour empêcher la vérification du dépassement de capacité.
Exemple
Cet exemple indique comment utiliser checked pour activer la vérification du dépassement au moment de l'exécution.
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
*/
}
Spécification du langage C#
Pour plus d'informations, voir la Spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.
Voir aussi
Référence
Checked et Unchecked (référence C#)