Tipi valore e tipi di riferimento
In Visual Basic esistono due generi di tipi: tipi riferimento e tipi valore. Le variabili dei tipi di riferimento archiviano i riferimenti ai relativi dati (oggetti), mentre le variabili dei tipi di valore contengono direttamente i dati. Con i tipi di riferimento, due variabili possono fare riferimento allo stesso oggetto. Di conseguenza le operazioni su una variabile possono influire sull'oggetto a cui fa riferimento l'altra variabile. Con i tipi valore, ogni variabile ha una propria copia dei dati e non è possibile che le operazioni su una variabile influiscano sull'altra (tranne nel caso del modificatore ByRef per i parametri).
Tipi di valore
Un tipo di dati è un tipo valore se contiene i dati all'interno della propria allocazione di memoria. I tipi valore includono quanto segue:
Tutti i tipi di dati numerici
Boolean
,Char
eDate
Tutte le strutture, anche se i relativi membri sono tipi riferimento
Enumerazioni, poiché il tipo sottostante è sempre
SByte
,Short
,Integer
,Long
,Byte
,UShort
,UInteger
oULong
Ogni struttura è un tipo valore, anche se contiene membri del tipo riferimento. Per questo motivo, i tipi valore come Char
e Integer
vengono implementati dalle strutture di .NET Framework.
È possibile dichiarare un tipo valore usando la parola chiave riservata, ad esempio Decimal
. È anche possibile usare la parola chiave New
per inizializzare un tipo valore. Ciò è particolarmente utile se il tipo ha un costruttore che accetta parametri. Un esempio è il costruttore Decimal(Int32, Int32, Int32, Boolean, Byte), che crea un nuovo valore Decimal
dalle parti fornite.
Tipi di riferimento
Un tipo riferimento archivia un riferimento ai relativi dati. I tipi riferimento includono quanto segue:
String
Tutte le matrici, anche se i relativi elementi sono tipi valore
Tipi di classe, come Form
Delegati
Una classe è un tipo riferimento. Si noti che ogni matrice è un tipo riferimento, anche se i relativi membri sono tipi valore.
Poiché ogni tipo riferimento rappresenta una classe .NET Framework sottostante, è necessario usare la parola chiave New Operator per inizializzarlo. L'istruzione seguente inizializza una matrice.
Dim totals() As Single = New Single(8) {}
Elementi che non sono tipi
Gli elementi di programmazione seguenti non sono qualificati come tipi, perché non è possibile specificare nessuno di essi come tipo di dati per un elemento dichiarato:
Namespaces (Spazi dei nomi)
Moduli
evento
Proprietà e routine
Variabili, costanti e campi
Utilizzo del tipo di dati Object
È possibile assegnare un tipo riferimento o un tipo valore a una variabile del tipo di dati Object
. Una variabile Object
contiene sempre un riferimento ai dati, mai i dati stessi. Tuttavia, se si assegna un tipo valore a una variabile Object
, questa si comporta come se contenesse i propri dati. Per altre informazioni, vedere Tipo di dati Object.
Per sapere se una variabile Object
funge da tipo riferimento o da tipo valore, passarla al metodo IsReference nella classe Information dello spazio dei nomi Microsoft.VisualBasic. Information.IsReference restituisce True
se il contenuto della variabile Object
rappresenta un tipo riferimento.