Leer en inglés

Compartir a través de


ValueType Clase

Definición

Proporciona la clase base para los tipos de valor.

C#
public abstract class ValueType
C#
[System.Serializable]
public abstract class ValueType
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class ValueType
Herencia
ValueType
Derivado
Atributos

Comentarios

ValueType invalida los métodos virtuales de Object con implementaciones más adecuadas para los tipos de valor. Consulte también Enum, que hereda de ValueType.

Los tipos de datos se separan en tipos de valor y tipos de referencia. Los tipos de valor se asignan a la pila o se asignan en línea en una estructura. Los tipos de referencia están asignados a montón. Los tipos de referencia y valor se derivan de la clase base final Object. En los casos en los que es necesario que un tipo de valor se comporte como un objeto, un contenedor que hace que el tipo de valor parezca un objeto de referencia se asigna en el montón y el valor del tipo de valor se copia en él. El contenedor está marcado para que el sistema sepa que contiene un tipo de valor. Este proceso se conoce como conversión boxing y el proceso inverso se conoce como unboxing. Boxing y unboxing permiten que cualquier tipo se trate como un objeto.

Aunque ValueType es la clase base implícita para los tipos de valor, no puede crear una clase que herede de ValueType directamente. En su lugar, los compiladores individuales proporcionan una palabra clave de lenguaje o una construcción (como struct en C# y Structure...End Structure en Visual Basic) para admitir la creación de tipos de valor.

Además de servir como clase base para los tipos de valor en .NET Framework, la estructura de ValueType generalmente no se usa directamente en el código. Sin embargo, se puede usar como parámetro en llamadas a métodos para restringir posibles argumentos a tipos de valor en lugar de todos los objetos, o para permitir que un método controle una serie de tipos de valor diferentes. En el ejemplo siguiente se muestra cómo ValueType impide que los tipos de referencia se pasen a métodos. Define una clase denominada Utility que contiene cuatro métodos: IsNumeric, que indica si su argumento es un número; IsInteger, que indica si su argumento es un entero; IsFloat, que indica si su argumento es un número de punto flotante; y Compare, que indica la relación entre dos valores numéricos. En cada caso, los parámetros del método son de tipo ValueTypey se impide que los tipos de referencia se pasen a los métodos.

C#
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);
   }
}

En el ejemplo siguiente se muestran las llamadas a los métodos de la clase Utility.

C#
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

Constructores

ValueType()

Inicializa una nueva instancia de la clase ValueType.

Métodos

Equals(Object)

Indica si esta instancia y un objeto especificado son iguales.

GetHashCode()

Devuelve el código hash de esta instancia.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Objectactual.

(Heredado de Object)
ToString()

Devuelve el nombre de tipo completo de esta instancia.

Se aplica a

Producto Versiones
.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

Consulte también