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

Clase ValueType

 

Publicado: octubre de 2016

Proporciona la clase base para los tipos de valor.

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

System.Object
  System.ValueType
    System.Enum

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

NombreDescripción
System_CAPS_protmethodValueType()

Inicializa una nueva instancia de la clase ValueType.

NombreDescripción
System_CAPS_pubmethodEquals(Object)

Indica si esta instancia y un objeto especificado son iguales.(Invalida Object.Equals(Object)).

System_CAPS_protmethodFinalize()

Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por el recolector de basura. (Heredado de Object).

System_CAPS_pubmethodGetHashCode()

Devuelve el código hash de esta instancia.(Invalida Object.GetHashCode()).

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficial del Object actual.(Heredado de Object).

System_CAPS_pubmethodToString()

Devuelve el nombre de tipo completo de esta instancia.(Invalida Object.ToString()).

ValueTypeinvalida los métodos virtuales de Object implementaciones más adecuado para los tipos de valor. Vea también Enum, que hereda de ValueType.

Tipos de datos se dividen en tipos de valor y tipos de referencia. Tipos de valor se asignan a la pila o asignados en línea en una estructura. Tipos de referencia son asignados por montón. Tipos de referencia y valor se derivan de la clase base fundamental Object. En casos donde es necesario para un tipo de valor que se comportan 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 se marca 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 conversión unboxing. Conversiones boxing y unboxing permiten tratar como un objeto de cualquier tipo.

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

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

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 muestra las llamadas a los métodos de la Utility clase.

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

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: