Implementazione del tipo di dati (Visual Basic)

Ogni tipo di dati di base in Visual Basic è supportato da una struttura o da una classe nello spazio dei nomi System. Il compilatore utilizza ciascuna parola chiave del tipo di dati come alias per la struttura o la classe sottostante. La dichiarazione di una variabile con la parola riservata Byte, ad esempio, equivale alla dichiarazione della stessa variabile con il nome di struttura completo System.Byte.

In Visual Basic i tipi di dati vengono implementati in base alla relativa classificazione. I tipi di dati Visual Basic possono essere classificati a seconda che una variabile di un determinato tipo archivi i propri dati piuttosto che un puntatore ai dati. Se la variabile memorizza internamente i propri dati si tratta di un tipo di valore; se contiene un puntatore a dati che si trovano altrove si tratta di un tipo di riferimento.

Tipi valore

Un tipo di dati è un tipo valore se contiene i dati nella propria allocazione di memoria. Fra i tipi di valore sono inclusi i seguenti:

  • Tutti i tipi di dati numerici

  • Boolean, Char e Date

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

  • Le enumerazioni, in quanto il relativo tipo sottostante è sempre SByte, Short, Integer, Long, Byte, UShort, UIntegero ULong

Ogni struttura è un tipo valore, anche se include membri del tipo di riferimento. Per questo motivo, i tipi valore come Char e Integer vengono implementati dalle strutture .NET Framework.

È possibile dichiarare un tipo valore tramite la parola chiave riservata, ad esempio Decimal. È inoltre possibile utilizzare la parola chiave New per inizializzare un tipo valore. Questo risulta particolarmente utile se il tipo presenta un costruttore che richiede parametri. Un esempio è rappresentato dal costruttore Decimal(Int32, Int32, Int32, Boolean, Byte), che compila un nuovo valore Decimal dalle parti fornite.

Tipi di riferimento

Un tipo riferimento contiene un puntatore a un'altra posizione di memoria contenente i dati. Fra i tipi di riferimento sono inclusi i seguenti:

  • String

  • Tutte le matrici, anche se i relativi elementi sono tipi valore

  • I tipi di classe, ad esempio Form

  • Delegati

Una classe è un tipo di riferimento. Per questo motivo, i tipi di riferimento come Object e String sono supportati dalle classi .NET Framework. Si noti che ogni matrice è un tipo di riferimento, anche se i suoi membri sono tipi valore.

Poiché ogni tipo di riferimento rappresenta una classe .NET Framework sottostante, è necessario utilizzare la parola chiave Operatore New (Visual Basic) in fase di inizializzazione. Di seguito è riportata un'istruzione per l'inizializzazione di una matrice.

Dim totals() As Single = New Single(8) {}

Ulteriori tipi disponibili in .NET Framework

Common Language Runtime (CLR) supporta anche strutture e classi non fornite da Visual Basic. La struttura System.Guid, ad esempio, fornisce un identificatore univoco globale (GUID, Global Unique Identifier) e la classe System.TimeZone supporta un fuso orario. È possibile utilizzare questi tipi per dichiarare variabili e costanti e accedere ai metodi che .NET Framework implementa su tali tipi. Visual Basic non supporta tuttavia operazioni o conversioni che interessano tipi non forniti direttamente.

Elementi diversi dai tipi

Gli elementi di programmazione riportati di seguito non si qualificano come tipi poiché non è possibile specificarli come tipi di dati per gli elementi dichiarati.

  • Spazi dei nomi

  • Moduli

  • Eventi

  • Proprietà e routine

  • Variabili, costanti e campi

Utilizzo di tipi 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 puntatore ai dati, mai i dati stessi. Se tuttavia si assegna un tipo valore a una variabile Object, essa funzionerà come se contenesse effettivamente i propri dati. Per ulteriori informazioni, vedere Tipo di dati Object.

È possibile scoprire se una variabile Object viene utilizzata come un tipo di riferimento o un tipo di valore passandola al metodo IsReference sulla classe Information nello spazio dei nomi Microsoft.VisualBasic. Se il contenuto della variabile Object rappresenta un tipo di riferimento, Information.IsReference restituisce True.

I tipi di dati includono membri

Poiché sono supportati da strutture e classi .NET Framework, i tipi di dati Visual Basic includono i membri. Questi membri includono costruttori, metodi, proprietà e campi. È possibile accedere ai membri (a eccezione dei costruttori) di una variabile con le stesse modalità con cui si accede a metodi e proprietà di un oggetto.

Nell'esempio riportato di seguito vengono utilizzate le proprietà Year, Month e Day e il metodo DaysInMonth della struttura System.DateTime per determinare i giorni restanti del mese corrente.

Dim current As Date = Now
Dim daysRemaining As Integer
daysRemaining = Date.DaysInMonth(current.Year, current.Month) - current.Day

Si noti che è necessario qualificare un riferimento a un membro di un tipo di dati mediante il nome del tipo (Date) o il nome della variabile dichiarata di tale tipo (current).

Esempi di membri di tipi di dati

Nei seguenti prototipi di codice vengono illustrati alcuni dei metodi, delle proprietà e dei campi utilizzabili con i tipi di dati.

<Char>.IsDigit() ' Returns True if character is a numeric digit.

<Char>.IsLower() ' Returns True if character is a lowercase letter.

<Date>.IsLeapYear() ' Returns True if current year is a leap year.

<Date>.ToUniversalTime() ' Returns local date/time converted to UTC.

<Double>.IsInfinity() ' Returns True if contents represent infinity.

<Double>.IsNaN() ' Returns True if contents are not a number (0/0).

<Long>.MaxValue ' Constant representing largest positive Int64 value.

<Object>.GetType() ' Returns Type object representing type of <Object>.

<Object>.GetType().GetTypeCode() ' Returns type code of <Object>.

<String>.Chars(<index>) ' Character at position <index> of <String>.

<String>.Length ' Number of characters currently in <String>.

Tutti i tipi numerici, tra cui Byte e Char, espongono i campi pubblici MaxValue e MinValue, che risultano molto utili quando si gestiscono tali tipi.

L'equivalenza dei membri dei tipi di dati non è garantita

In .NET Framework sono inoltre disponibili diversi metodi utilizzabili sui tipi di dati che potrebbero sembrare equivalenti a funzioni e parole chiave di Visual Basic. Visual Basic, tuttavia, non utilizza sempre i metodi di .NET Framework per eseguire la conversione o altre operazioni e i risultati non sono sempre uguali.

Il metodo ToSingle, ad esempio, esegue lo stesso tipo di azione che la parola chiave CSng effettua su un'espressione Decimal. Non è tuttavia garantito che CSng utilizzi System.tipiDati.ToSingle e pertanto non si ha la certezza assoluta che i risultati siano sempre gli stessi, specialmente in situazioni limite.

In generale è preferibile utilizzare gli elementi di programmazione Visual Basic in quanto sono più semplici e rendono il codice più leggibile. In alcuni casi, potrebbe essere necessario aggiungere alcune funzioni supplementari fornite da un metodo .NET Framework. Per visualizzare un esempio di questo, vedere la sezione del problema relativo alla restituzione dei risultati da parte dell'operatore mod in Risoluzione dei problemi relativi ai tipi di dati (Visual Basic).

Sezioni correlate

Argomento

Definizione

Tipi di dati in Visual Basic

Vengono introdotti i tipi di dati forniti da Visual Basic e ne viene descritto l'utilizzo.

Riepilogo dei tipi di dati (Visual Basic)

Vengono elencati i tipi di dati elementari disponibili in Visual Basic.

Conversioni di tipi in Visual Basic

Viene illustrata la conversione di tipi, ovvero il processo di passaggio di un valore da un tipo di dati a un altro.

Strutture (Visual Basic)

Vengono illustrate le strutture che sono tipi definiti dall'utente dichiarate con la parola chiave Structure.

Utilizzo efficiente dei tipi di dati (Visual Basic)

Viene descritto come rendere più veloce l'esecuzione utilizzando i tipi di dati.

Tipo di dati Object

Viene descritto il tipo di dati Object, che può essere utilizzato per fare riferimento a dati di qualsiasi tipo.

Riferimenti

Boolean

Byte

Char

DateTime

Decimal

Double

Guid

TimeZone