Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés
Esta documentación está archivada y no tiene mantenimiento.

ValueType (Clase)

Proporciona la clase base para tipos de valores.

Espacio de nombres:  System
Ensamblado:  mscorlib (en mscorlib.dll)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class ValueType

El tipo ValueType expone los siguientes miembros.

  NombreDescripción
Método protegidoCompatible con XNA Frameworkaey3s293.PortableClassLibrary(es-es,VS.100).gifValueTypeInicializa una nueva instancia de la clase ValueType.
Arriba

  NombreDescripción
Método públicoCompatible con XNA Frameworkaey3s293.PortableClassLibrary(es-es,VS.100).gifEqualsIndica si esta instancia y un objeto especificado son iguales. (Invalida a Object.Equals(Object)).
Método protegidoCompatible con XNA Frameworkaey3s293.PortableClassLibrary(es-es,VS.100).gifFinalizePermite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por la recolección de elementos no utilizados. (Se hereda de Object).
Método públicoCompatible con XNA Frameworkaey3s293.PortableClassLibrary(es-es,VS.100).gifGetHashCodeDevuelve el código hash de esta instancia. (Invalida a Object.GetHashCode()).
Método públicoCompatible con XNA Frameworkaey3s293.PortableClassLibrary(es-es,VS.100).gifGetTypeObtiene el objeto Type de la instancia actual. (Se hereda de Object).
Método protegidoCompatible con XNA Frameworkaey3s293.PortableClassLibrary(es-es,VS.100).gifMemberwiseCloneCrea una copia superficial del objeto Object actual. (Se hereda de Object).
Método públicoCompatible con XNA Frameworkaey3s293.PortableClassLibrary(es-es,VS.100).gifToStringDevuelve el nombre de tipo completo de esta instancia. (Invalida a Object.ToString()).

En XNA Framework 3.0, este miembro se hereda de Object.ToString().


En  , este miembro se hereda de Object.ToString().
Arriba

ValueType reemplaza los métodos virtuales de Object por implementaciones más apropiadas de tipos de valores. Vea también Enum, que se hereda de ValueType.

Los tipos de datos se encuentran separados en tipos de valor y tipos de referencia. Los tipos de valor se encuentran situados en pila o en línea en una estructura. Los tipos de referencia se encuentran en montones. Tanto los tipos de valor como los tipos de referencia se derivan del Object de la última clase base. En aquellos casos en los que un tipo de valor necesita actuar como un objeto, se coloca en el montón un contenedor que hace que el tipo de valor parezca un objeto de referencia y el valor del tipo de valor se copia en éste. El contenedor aparece marcado para que el sistema sepa que contiene un tipo de valor. A este proceso se le conoce como conversión boxing y al proceso inverso se le conoce como conversión unboxing. Las conversiones boxing y unboxing permiten que cualquier tipo sea tratado como un objeto.

Aparte de actuar como la clase base para los tipos de valor en .NET Framework, la estructura ValueType no se utiliza directamente en el código. Sin embargo, se puede utilizar como un parámetro en llamadas al método para restringir los posibles argumentos a los tipos de valor en lugar de todos los objetos o permitir a un método administrar varios tipos de valor diferentes. El siguiente ejemplo muestra cómo ValueType evita que los tipos de referencia se pasen a los 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 de método son del tipo ValueTypey se evita pasar los tipos de referencia a los métodos.


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;
   }
}


En el ejemplo siguiente se muestra cómo llamar a los métodos de la clase 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


.NET Framework

Compatible con: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Compatible con:

Windows 7, Windows Vista SP1 o posterior, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (no se admite Server Core), Windows Server 2008 R2 (se admite Server Core con SP1 o posterior), Windows Server 2003 SP2

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Fecha

Historial

Motivo

Octubre de 2010

Se ha agregado un ejemplo.

Comentarios de los clientes.

Mostrar: