Types valeur (référence C#)Value types (C# Reference)

Il existe deux sortes de types valeur :There are two kinds of value types:

Principales caractéristiques des types valeurMain features of value types

Une variable d’un type valeur contient une valeur du type.A variable of a value type contains a value of the type. Par exemple, une variable du type int peut contenir la valeur 42.For example, a variable of the int type might contain the value 42. Ce type s’oppose au type référence, qui contient une référence à une instance du type, également appelée objet.This differs from a variable of a reference type, which contains a reference to an instance of the type, also known as an object. Lorsque vous affectez une nouvelle valeur à une variable d’un type valeur, cette valeur est copiée.When you assign a new value to a variable of a value type, that value is copied. Si vous affectez une nouvelle valeur à une variable d’un type référence, la référence est copiée, et non l’objet lui-même.When you assign a new value to a variable of a reference type, the reference is copied, not the object itself.

Tous les types valeur sont implicitement dérivés de System.ValueType.All value types are derived implicitly from the System.ValueType.

Contrairement aux types référence, vous ne pouvez pas faire dériver un nouveau type d’un type valeur.Unlike with reference types, you cannot derive a new type from a value type. En revanche, comme les types référence, les structs peuvent implémenter des interfaces.However, like reference types, structs can implement interfaces.

Les variables de type valeur ne peut pas être null par défaut.Value type variables cannot be null by default. Toutefois, les variables des types valeur Nullable correspondants peuvent être null.However, variables of the corresponding nullable value types can be null.

Chaque type valeur a un constructeur implicite sans paramètre qui initialise la valeur par défaut de ce type.Each value type has an implicit parameterless constructor that initializes the default value of that type. Pour plus d’informations sur les valeurs par défaut des types valeur, voir Tableau des valeurs par défaut.For information about default values of value types, see Default values table.

Types simplesSimple types

Les types simples sont un ensemble de types struct prédéfinis fournis par C#, composé des types suivants :The simple types are a set of predefined struct types provided by C# and comprise the following types:

Les types simples sont identifiés par des mots clés, qui sont simplement des alias de types struct prédéfinis dans l’espace de noms System.The simple types are identified through keywords, but these keywords are simply aliases for predefined struct types in the System namespace. Par exemple, int est un alias de System.Int32.For example, int is an alias of System.Int32. Pour connaître la liste complète des alias, voir Tableau des types intégrés.For a complete list of aliases, see Built-in types table.

Les types simples diffèrent des autres types struct en ce qu’ils autorisent des opérations supplémentaires :The simple types differ from other struct types in that they permit certain additional operations:

  • Les types simples peuvent être initialisés à l’aide de littéraux.Simple types can be initialized by using literals. Par exemple, 'A' est un littéral de type char, tandis que 2001 est un littéral de type int.For example, 'A' is a literal of the type char and 2001 is a literal of the type int.

  • Vous pouvez déclarer des constantes des types simples avec le mot clé const.You can declare constants of the simple types with the const keyword. Il n’est pas possible d’avoir des constantes d’autres types struct.It's not possible to have constants of other struct types.

  • Les expressions constantes, dont les opérandes sont tous des constantes de type simple, sont évaluées au moment de la compilation.Constant expressions, whose operands are all simple type constants, are evaluated at compile time.

Pour plus d’informations, voir la section Types simples de la spécification du langage C#.For more information, see the Simple types section of the C# language specification.

Initialiser des types valeurInitializing value types

En C#, les variables locales doivent être initialisées avant d’être utilisées.Local variables in C# must be initialized before they are used. Par exemple, vous pouvez déclarer une variable locale sans l’initialiser comme dans l’exemple suivant :For example, you might declare a local variable without initialization as in the following example:

int myInt;

Vous ne pouvez pas l’utiliser avant de l’avoir initialisée.You cannot use it before you initialize it. Vous pouvez l’initialiser à l’aide de l’instruction suivante :You can initialize it using the following statement:

myInt = new int();  // Invoke parameterless constructor for int type.

Cette instruction est équivalente à l’instruction suivante :This statement is equivalent to the following statement:

myInt = 0;         // Assign an initial value, 0 in this example.

Bien entendu, vous pouvez intégrer la déclaration et l’initialisation dans une même instruction comme dans les exemples suivants :You can, of course, have the declaration and the initialization in the same statement as in the following examples:

int myInt = new int();

– ou ––or–

int myInt = 0;

L’opérateur new permet d’appeler le constructeur sans paramètre du type spécifique et d’affecter la valeur par défaut à la variable.Using the new operator calls the parameterless constructor of the specific type and assigns the default value to the variable. Dans l’exemple précédent, le constructeur sans paramètre a affecté la valeur 0 à myInt.In the preceding example, the parameterless constructor assigned the value 0 to myInt. Pour plus d’informations sur les valeurs affectées en appelant les constructeurs sans paramètre, voir Tableau des valeurs par défaut.For more information about values assigned by calling parameterless constructors, see Default values table.

Avec les types définis par l’utilisateur, l’opérateur new permet d’appeler le constructeur sans paramètre.With user-defined types, use new to invoke the parameterless constructor. Par exemple, l’instruction suivante appelle le constructeur sans paramètre du struct Point :For example, the following statement invokes the parameterless constructor of the Point struct:

var p = new Point(); // Invoke parameterless constructor for the struct.

Après cet appel, le struct est considéré comme définitivement assigné ; autrement dit, tous ses membres sont initialisés avec leurs valeurs par défaut.After this call, the struct is considered to be definitely assigned; that is, all its members are initialized to their default values.

Pour plus d'informations sur l'opérateur new, voir new.For more information about the new operator, see new.

Pour plus d’informations sur la mise en forme de la sortie des types numériques, voir Tableau des formats des résultats numériques.For information about formatting the output of numeric types, see Formatting numeric results table.

Voir aussiSee also