Share via


Conversioni di ampliamento e restrizione (Visual Basic)

Un aspetto importante da considerare durante una conversione di tipo è se il risultato della conversione è compreso o meno nell'intervallo del tipo di dati di destinazione.

In conversione di ampliamento modifica di un valore a un tipo di dati che può consentire tutti i valori possibili dei dati originali.Le conversioni verso un tipo di dati più grande preservano il valore di origine ma possono modificarne la rappresentazione.Ciò si verifica se si esegue la conversione da un tipo integrale a Decimal, o da Char in String.

Una conversione di restrizione esegue il passaggio di un valore a un tipo di dati che potrebbe non essere in grado di contenere alcuni dei valori possibili.Ad esempio, un valore frazionario viene arrotondato quando viene convertito in un tipo integrale e un tipo numerico convertito in Boolean viene ridotto peruna o l'altra True o False.

Conversioni di ampliamento

Nella tabella che segue sono illustrate le conversioni di ampliamento standard.

Tipo di dati

Tipi di dati risultanti dalla conversione a un tipo di dati più grande 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

Qualsiasi tipo enumerato (Enum)

Il tipo integrale sottostante e qualsiasi tipo che viene convertito il tipo sottostante.

Char

Char, String

Matrice Char

Matrice Char, String

Qualsiasi tipo

Object

Qualsiasi tipo derivato

qualsiasi tipo di base da cui è derivato 3.

Qualsiasi tipo

qualsiasi interfaccia che implementa.

Nothing

qualsiasi tipo di dati o tipo di oggetto.

1 Per definizione, ogni tipo di dati viene ampliato in se stesso.

2 Le conversioni da Integer, UInteger, Long, ULong o Decimal a Single o Double possono comportare una perdita nella precisione, ma non una riduzione dell'ordine di grandezza.In questo senso non sono soggette a perdita di informazioni.

3 Può apparire sorprendente che una conversione da un tipo derivato a uno dei relativi tipi di base sia una conversione di ampliamento.Il motivo è che il tipo derivato contiene tutti i membri del tipo di base, pertanto viene qualificato come un'istanza del tipo di base.Viceversa, il tipo di base non contiene nuovi membri definiti dal tipo derivato.

Le conversioni di ampliamento vengono sempre eseguite correttamente in fase di esecuzione e non comportano mai una perdita di dati.È sempre possibile eseguirle in modo implicito, indipendentemente dal fatto che l'Istruzione Option Strict imposti l'opzione di controllo dei tipi su On o su Off.

Conversioni di restrizione

Di seguito sono elencate le conversioni di restrizione standard:

  • Le direzioni inverse delle conversioni di ampliamento elencate nella tabella precedente (tranne quella che prevede che ogni tipo viene ampliato in se stesso)

  • Le conversioni, in entrambe le direzioni, tra valori Boolean e un qualsiasi tipo numerico

  • Le conversioni da un qualsiasi tipo numerico in un qualsiasi tipo enumerato (Enum)

  • Le conversioni, in entrambe le direzioni, tra valori String e un qualsiasi tipo numerico, Boolean o Date

  • Le conversioni da un tipo di dati o tipo di oggetto a un tipo da esso derivato

Le conversioni di restrizione non vengono sempre eseguite correttamente in fase di esecuzione e possono causare una perdita di dati.Viene generato un errore se il tipo di dati di destinazione non è in grado di ricevere il valore convertito.Una conversione numerica ad esempio può comportare un overflow.Il compilatore non consente di eseguire conversioni di restrizione in modo implicito, a meno che l'Istruzione Option Strict non imposti l'opzione di controllo dei tipi su Off.

[!NOTA]

L'errore di conversione verso un tipo di dati più piccolo viene eliminato per le conversioni dagli elementi di una raccolta For Each…Next alla variabile di controllo del ciclo.Per ulteriori informazioni ed esempi, vedere la sezione "Conversioni verso tipi di dati più piccoli" di Istruzione For Each...Next (Visual Basic).

k1e94s7e.collapse_all(it-it,VS.110).gifQuando utilizzare le conversioni di restrizione

Si consiglia di utilizzare una conversione di restrizione quando si è certi che il valore di origine può essere convertito nel tipo di dati di destinazione senza errori o perdita di dati.Ad esempio, se si dispone di un oggetto String stabilito contiene o “true„ o “False„, è possibile utilizzare CBool parola chiave per convertirla a Boolean.

Eccezioni durante la conversione

Dal momento che hanno sempre esito positivo, le conversioni di ampliamento non generano eccezioni.Quando non riescono, le conversioni di restrizione generano di solito le seguenti eccezioni:

  • InvalidCastException: se non è definita alcuna conversione tra i due tipi

  • OverflowException: (solo tipi integrali) se il valore convertito è troppo grande per il tipo di destinazione

Se una classe o una struttura definisce una Funzione CType (Visual Basic) da utilizzare come operatore di conversione rispetto a tale classe o struttura, la funzione CType può generare qualsiasi eccezione ritenuta appropriata.Inoltre, l'oggetto CType potrebbe chiamare funzioni di Visual Basic o metodi di .NET Framework che a loro volta potrebbero generare diverse eccezioni.

Modifiche durante conversioni di tipi riferimento

Una conversione da un tipo di riferimento copia solo il puntatore al valore.Il valore in sé non viene in alcun modo copiato né modificato.L'unica differenza può essere rappresentata dal tipo di dati della variabile contenente il puntatore.Nell'esempio che segue il tipo di dati viene convertito dalla classe derivata nella relativa classe di base, ma l'oggetto al quale ora puntano entrambe le variabili è invariato.

' 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

Vedere anche

Attività

Procedura: convertire un oggetto in un altro tipo in Visual Basic

Riferimenti

Riepilogo dei tipi di dati (Visual Basic)

Funzioni di conversione del tipo (Visual Basic)

Concetti

Tipi di dati in Visual Basic

Conversioni implicite ed esplicite (Visual Basic)

Conversioni fra stringhe e altri tipi (Visual Basic)

Conversioni di matrici (Visual Basic)

Altre risorse

Conversioni di tipi in Visual Basic