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 |
Vengono introdotti i tipi di dati forniti da Visual Basic e ne viene descritto l'utilizzo. |
|
Vengono elencati i tipi di dati elementari disponibili 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. |
|
Vengono illustrate le strutture che sono tipi definiti dall'utente dichiarate con la parola chiave Structure. |
|
Viene descritto come rendere più veloce l'esecuzione utilizzando i tipi di dati. |
|
Viene descritto il tipo di dati Object, che può essere utilizzato per fare riferimento a dati di qualsiasi tipo. |