Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Conversiones de ampliación y de restricción (Visual Basic)

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 tener en cuenta cualquier valor posible de los datos originales. Las conversiones de ampliación conservan el valor de origen pero pueden cambiar su representación. Esto ocurre si se convierte un tipo entero en Decimal, o de Char a String.

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. Por ejemplo, un valor fraccionario se redondea cuando se convierte a un tipo entero, y reducen a un tipo numérico que se convierte a Boolean a True o a False.

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

Simple

Single , Double

Double

Double

Cualquier tipo enumerado (Enum)

El tipo entero subyacente y cualquier tipo al que se amplía el tipo subyacente.

Char

Char , String

Matriz Char

Matriz de tipo Char, String

Cualquier tipo

object

Cualquier tipo derivado

Cualquier tipo base del que sea derivado 3.

Cualquier tipo

Las interfaces que implementa.

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 base sea una ampliación. La justificación está en el hecho de que el tipo derivado contiene todos lo<s miembros del tipo base, por lo que se califica como una instancia del tipo base. A la inversa, el tipo base 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.

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 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).

k1e94s7e.collapse_all(es-es,VS.120).gifCuá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 String sabe que contiene “True” o “False”, puede utilizar la palabra clave de CBool para convertirla en Boolean.

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 enteros solo) si el valor convertido es demasiado grande para el tipo de destino

Si una clase o estructura define CType (Función) (Visual Basic) 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.

Una conversión de un tipo de referencia sólo copia el puntero al valor. El valor en sí mismo no se copia ni se cambia en modo alguno. Lo único que puede cambiar es el tipo de datos de la variable que contiene el puntero. En el ejemplo siguiente, el tipo de datos cambia de la clase derivada a su clase base, pero el objeto al que apuntan ahora ambas variables no se modifica.

' Assume class cSquare inherits from class cShape.
Dim shape As cShape
Dim square As cSquare = New cSquare
' The following statement performs a widening
' conversion from a derived class to its base class.
shape = square

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft