Conversiones de ampliación y de restricción

Actualización: Julio de 2008

Una consideración importante de una conversión de tipos es si el resultado de la conversión está dentro del intervalo del tipo de datos de destino. Una conversión de ampliación cambia un valor a un tipo de datos que puede dar cabida a cualquier valor posible de los datos originales. Una conversión de restricción cambia un valor a un tipo de datos que quizás no pueda contener alguno de los valores posibles.

Conversiones de ampliación

La tabla siguiente muestra las conversiones de ampliación estándar.

Tipo de datos

Se amplía a los siguientes tipos de datos 1

SByte

SByte, Short, Integer, Long, Decimal, Single, Double

Byte

Byte, Short, UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

Short

Short, Integer, Long, Decimal, Single, Double

UShort

UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

Integer

Integer, Long, Decimal, Single, Double2

UInteger

UInteger, Long, ULong, Decimal, Single, Double2

Long

Long, Decimal, Single, Double2

ULong

ULong, Decimal, Single, Double2

Decimal

Decimal, Single, Double2

Single

Single, Double

Double

Double

Cualquier tipo enumerado (Enum)

Su tipo integral subyacente y cualquier tipo al que se amplía el tipo subyacente

Char

Char, String

Char array

Char array, String

Cualquier tipo

Object

Cualquier tipo derivado

Cualquier tipo básico del que se deriva 3

Cualquier tipo

Cualquier interfaz que implemente

Nothing

Cualquier tipo de datos o tipo de objeto

1 Por definición, cada tipo de datos se amplia a sí mismo.

2 Las conversiones de Integer, UInteger, Long, ULong o Decimal a Single o Double podrían generar una pérdida de precisión pero nunca una pérdida de magnitud. En este sentido, no provocan pérdida de información.

3 Puede parecer sorprendente que una conversión de un tipo derivado en uno de sus tipos básicos sea una ampliación. La justificación está en el hecho de que el tipo derivado contiene todos los miembros del tipo básico, por lo que se califica como una instancia del tipo básico. A la inversa, el tipo básico no contiene nuevos miembros definidos por el tipo derivado.

Las conversiones de ampliación son siempre satisfactorias en tiempo de ejecución y no provocan nunca pérdida de datos. Siempre puede realizarlas implícitamente, independientemente de si Option Strict (Instrucción) establece el modificador de comprobación de tipos en On o en Off.

Conversiones de restricción

Las conversiones de restricción estándar incluyen:

  • Las direcciones inversas de las conversiones de ampliación en la tabla anterior (sólo que cada tipo se amplía a sí mismo)

  • Conversiones en ambas direcciones entre Boolean y cualquier tipo numérico

  • Conversiones de cualquier tipo numérico a cualquier tipo enumerado (Enum)

  • Conversiones en ambas direcciones entre String y cualquier tipo numérico, Boolean o Date

  • Conversiones de un tipo de datos o tipo de objeto en un tipo derivado del mismo

Las conversiones de restricción no son siempre satisfactorias en tiempo de ejecución y pueden generar errores o provocar pérdida de datos. Se produce un error si el tipo de datos de destino no puede recibir el valor que se está convirtiendo. Por ejemplo, una conversión numérica puede provocar un desbordamiento. El compilador no le permite realizar las conversiones de restricción implícitamente a menos que Option Strict (Instrucción) establezca el modificador de comprobación de tipos en Off.

Nota:

El error de la conversión de restricción se suprime en las conversiones de los elementos de una colección For Each…Next a la variable de control del bucle. Para obtener más información y ejemplos, consulte la sección "Conversiones de restricción" en Instrucción For Each...Next (Visual Basic).

Cuándo se utilizan las conversiones de restricción

Se utiliza una conversión de restricción cuando se sabe que el valor de origen se puede convertir en el tipo de datos de destino sin error o pérdida de datos. Por ejemplo, si tiene un tipo de datos String y sabe que contiene "True" o "False", puede utilizar la palabra clave CBool para convertirlo en Boolean.

Excepciones durante la conversión

Como las conversiones de ampliación siempre son satisfactorias, no producen excepciones. Las conversiones de restricción, cuando se produce un error, suelen producir las excepciones siguientes:

  • InvalidCastException: si no hay definida ninguna conversión entre los dos tipos

  • OverflowException: (tipos integrales sólo) si el valor convertido es demasiado grande para el tipo de destino

Si una clase o estructura define CType (Función) para que actúe como un operador de conversión a esa clase o estructura o desde ellas, CType puede producir cualquier excepción que considere apropiada. Además, CType puede llamar a las funciones de Visual Basic o a los métodos de .NET Framework que, a su vez, pueden producir una variedad de excepciones.

Vea también

Tareas

Cómo: Convertir un objeto en otro tipo en Visual Basic

Conceptos

Tipos de datos en Visual Basic

Conversiones implícitas y explícitas

Cambios de valores durante las conversiones

Conversiones entre cadenas y otros tipos

Conversiones de matrices

Programación sin tipos en Visual Basic

Referencia

Resumen de tipos de datos (Visual Basic)

Funciones de conversión de tipos

Otros recursos

Conversiones de tipos en Visual Basic

Historial de cambios

Fecha

Historial

Motivo

Julio de 2008

Se ha agregado una nota sobre las conversión de restricción y For Each…Next.

Comentarios de los clientes.