de MSDN: (http://msdn.microsoft.com/en-us/library/s1ax56ch%28VS.71%29.aspx)
Types de valeur
Les types de valeur sont constitués de deux catégories principales:
* Struct type
* Enumeration type
Les types struct contiennent les types struct définis par l'utilisateur et le suivant les types simples intégrés:
* Numeric types
o Integral types
o Floating-point types
o decimal
* bool
Caractéristiques principales des types de valeurs
Une variable d'un type de valeur contient toujours une valeur de ce type. L'affectation à une variable d'un type de valeur crée une copie de la valeur affectée, tandis que l'affectation à une variable d'un type de référence crée une copie de la référence mais pas de l'objet référencé.
Tous les types de valeurs sont dérivés implicitement de la classe Object.
Contrairement aux types de référence, il n'est pas possible de dériver un nouveau type à partir d'un type de valeur. Cependant, comme les types de référence, les structures peuvent implémenter des interfaces.
Contrairement aux types de référence, il est impossible qu'un type de valeur contienne la valeur null.
Chaque type de valeur a un constructeur par défaut implicite qui initialise la valeur par défaut de ce type. Pour plus d'informations sur les valeurs par défaut des types de valeur, voir Table des valeurs par défaut.
Caractéristiques principales des types simples
Tous les types simples sont des alias des types .NET Framework. Par exemple, int est un alias de System.Int32. Pour une liste complète des alias, voir la table des types prédéfinis.
Les expressions constantes, dont les opérandes sont toutes des constantes de type simple, sont évaluées au moment de la compilation. Pour plus d'informations, voir 7.15 Expressions constantes.
Les types simples peuvent être initialisés en utilisant des littéraux. Par exemple, 'A' est un littéral de type char et 2001 est un littéral de type int.
« Ce qui fait un un entier type de valeur "- CLR" connaît "les types de valeurs primitives et les gère spécialement, il n'est pas spécifique inhérent au langage (disons C#) – Roman
Les types de valeurs ne sont pas nécessairement alloués sur la pile. Considérons un champ de type valeur dans une classe - l'instance de cette classe serait sur le tas, et donc ce serait le champ. En fait, toute la question de l'allocation est strictement un détail d'implémentation - les types de valeur ont une sémantique de valeur et pas d'identité d'objet inhérente (donc non ===, par exemple), et c'est tout ce qu'il y a à faire. –
duplication possible de [Chaque type dans .net hérite de System.Object?] (Http://stackoverflow.com/questions/1316626/does-every-type-in-net-inherit-from-system-object) – nawfal