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 e Date

  • Tutte le strutture, anche se i relativi membri sono tipi riferimento

  • Enumerazioni, poiché il tipo sottostante è sempre SByte, Short, Integer, Long, Byte, UShort, UInteger o ULong

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.

Vedi anche