Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. |
Traduction
Source
|
ValueType, classe
Fournit la classe de base pour les types valeur.
Assembly : mscorlib (dans mscorlib.dll)
Le type ValueType expose les membres suivants.
| Nom | Description | |
|---|---|---|
|
Equals | Indique si cette instance et un objet spécifié sont égaux. (Substitue Object.Equals(Object).) |
|
Finalize | Autorise un objet à tenter de libérer des ressources et d'exécuter d'autres opérations de netto***ge avant qu'il ne soit récupéré par l'opération garbage collection. (Hérité de Object.) |
|
GetHashCode | Retourne le code de hachage pour cette instance. (Substitue Object.GetHashCode().) |
|
GetType | Obtient le Type de l'instance actuelle. (Hérité de Object.) |
|
MemberwiseClone | Crée une copie superficielle de l'objet Object actif. (Hérité de Object.) |
|
ToString |
Retourne le nom de type qualifié complet de cette instance.
(Substitue Object.ToString().) Dans XNA Framework 3.0, ce membre est hérité de Object.ToString(). Dans , ce membre est hérité de Object.ToString(). |
ValueType substitue aux méthodes virtuelles provenant de Object des implémentations plus appropriées pour les types valeur. Voir aussi Enum qui hérite de ValueType.
Les types de données se divisent en types valeur et en types référence. Les types valeur sont soit alloués par des piles, soit alloués inline dans une structure. Les types référence sont alloués par des tas. Les types valeur et référence dérivent de la classe de base fondamentale Object. Au cas où un type valeur devrait se comporter comme un objet, un wrapper faisant ressembler un type valeur à un objet de référence est alloué sur le tas et la valeur du type valeur y est copiée. Ce wrapper est marqué pour que le système sache qu'il contient un type valeur. Ce processus porte le nom de boxing et le processus inverse, d'unboxing. Le boxing et l'unboxing permettent à n'importe quel type d'être traité comme un objet.
En plus de servir de classe de base pour les types valeur dans le .NET Framework, la structure ValueType n'est pas utilisée en général directement dans le code. Toutefois, elle peut être utilisée comme paramètre dans les appels de méthode pour restreindre les arguments éventuels aux types valeur au lieu de tous les objets, ou autoriser une méthode à gérer plusieurs types valeur différents. L'exemple suivant illustre comment ValueType empêche de passer des types référence aux méthodes. Il définit une classe nommée Utility qui contient quatre méthodes : IsNumeric qui indique si son argument est un nombre ; IsInteger qui indique si son argument est un entier ; IsFloat qui indique si son argument est un nombre à virgule flottante ; et Compare qui indique la relation entre deux valeurs numériques. Dans chaque cas, les paramètres de la méthode sont de type ValueType, et les types référence ne sont pas transmis aux méthodes.
using System; using System.Numerics; public class Utility { public enum NumericRelationship { GreaterThan = 1, EqualTo = 0, LessThan = -1 }; public static NumericRelationship Compare(ValueType value1, ValueType value2) { if (! IsNumeric(value1)) throw new ArgumentException("value1 is not a number."); else if (! IsNumeric(value2)) throw new ArgumentException("value1 is not a number."); // Use BigInteger as common integral type if (IsInteger(value1) && IsInteger(value2)) { BigInteger bigint1 = (BigInteger) value1; BigInteger bigint2 = (BigInteger) value2; return (NumericRelationship) BigInteger.Compare(bigint1, bigint2); } // At least one value is floating point; use Double. else { Double dbl1 = 0; Double dbl2 = 0; try { dbl1 = Convert.ToDouble(value1); } catch (OverflowException) { Console.WriteLine("value1 is outside the range of a Double."); } try { dbl2 = Convert.ToDouble(value2); } catch (OverflowException) { Console.WriteLine("value2 is outside the range of a Double."); } return (NumericRelationship) dbl1.CompareTo(dbl2); } } public static bool IsInteger(ValueType value) { return (value is SByte || value is Int16 || value is Int32 || value is Int64 || value is Byte || value is UInt16 || value is UInt32 || value is UInt64 || value is BigInteger); } public static bool IsFloat(ValueType value) { return (value is float | value is double | value is Decimal); } public static bool IsNumeric(ValueType value) { if ( ! (value is Byte || value is Int16 || value is Int32 || value is Int64 || value is SByte || value is UInt16 || value is UInt32 || value is UInt64 || value is BigInteger || value is Decimal || value is Double || value is Single)) return false; else return true; } }
L'exemple de code suivant illustre les appels des méthodes de la classe Utility.
public class Example { public static void Main() { Console.WriteLine(Utility.IsNumeric(12)); Console.WriteLine(Utility.IsNumeric(true)); Console.WriteLine(Utility.IsNumeric('c')); Console.WriteLine(Utility.IsNumeric(new DateTime(2012, 1, 1))); Console.WriteLine(Utility.IsInteger(12.2)); Console.WriteLine(Utility.IsInteger(123456789)); Console.WriteLine(Utility.IsFloat(true)); Console.WriteLine(Utility.IsFloat(12.2)); Console.WriteLine(Utility.IsFloat(12)); Console.WriteLine("{0} {1} {2}", 12.1, Utility.Compare(12.1, 12), 12); } } // The example displays the following output: // True // False // False // False // False // True // False // True // False // 12.1 GreaterThan 12
Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows XP SP2 Édition x64, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2
Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.