Lire en anglais

Partager via


ValueType Classe

Définition

Fournit la classe de base pour les types valeur.

public abstract class ValueType
[System.Serializable]
public abstract class ValueType
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class ValueType
Héritage
ValueType
Dérivé
Attributs

Remarques

ValueType remplace les méthodes virtuelles de Object par des implémentations plus appropriées pour les types valeur. Voir aussi Enum, qui hérite de ValueType.

Les types de données sont séparés en types valeur et types de référence. Les types valeur sont alloués par pile ou alloués inline dans une structure. Les types de référence sont alloués au tas. Les types référence et valeur sont dérivés de la classe de base ultime Object. Dans les cas où il est nécessaire qu’un type valeur se comporte comme un objet, un wrapper qui rend le type valeur semblable à un objet de référence est alloué sur le tas, et la valeur du type valeur est copiée dans celle-ci. Le wrapper est marqué afin que le système sache qu’il contient un type valeur. Ce processus est appelé boxing, et le processus inverse est appelé unboxing. La boxe et l’unboxing permettent de traiter n’importe quel type en tant qu’objet.

Bien que ValueType soit la classe de base implicite pour les types valeur, vous ne pouvez pas créer une classe qui hérite de ValueType directement. Au lieu de cela, les compilateurs individuels fournissent un mot clé ou une construction de langage (par exemple, struct en C# et Structure...End Structure en Visual Basic) pour prendre en charge la création de types valeur.

En plus de servir de classe de base pour les types valeur dans .NET Framework, la structure ValueType n’est généralement pas utilisée directement dans le code. Toutefois, il peut être utilisé comme paramètre dans les appels de méthode pour restreindre les arguments possibles aux types valeur au lieu de tous les objets, ou pour permettre à une méthode de gérer un certain nombre de types valeur différents. L’exemple suivant montre comment ValueType empêche les types de référence d’être passés à des 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 méthode sont de type ValueType, et les types de référence ne peuvent pas être passés 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("value2 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)
   {
      return (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);
   }
}

L’exemple suivant illustre les appels aux 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

Constructeurs

ValueType()

Initialise une nouvelle instance de la classe ValueType.

Méthodes

Equals(Object)

Indique si cette instance et un objet spécifié sont égaux.

GetHashCode()

Retourne le code de hachage pour cette instance.

GetType()

Obtient la Type de l’instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Objectactuel.

(Hérité de Object)
ToString()

Retourne le nom de type complet de cette instance.

S’applique à

Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Voir aussi