Elenco dei tipi
Aggiornamento: novembre 2007
Specifica i parametri di tipo per un elemento di programmazione generico. I vari parametri sono separati da virgole. Di seguito è riportata la sintassi di un parametro di tipo.
typename [ As constraintlist ]
Parti
typename
Obbligatoria. Nome del parametro di tipo. Si tratta di un segnaposto da sostituire con un tipo definito specificato dall'argomento di tipo corrispondente.constraintlist
Facoltativa. Elenco di requisiti che vincolano il tipo di dati che è possibile specificare per typename. In presenza di più vincoli è possibile racchiuderli tra parentesi graffe ({ }) e separarli con virgole. L'elenco dei vincoli deve essere introdotto dalla parola chiave As. As viene utilizzata una sola volta all'inizio dell'elenco.
Note
Ogni elemento di programmazione generico deve accettare almeno un parametro di tipo. Tale parametro è un segnaposto per uno specifico tipo, ossia un elemento costruito, specificato dal codice client al momento della creazione di un'istanza del tipo generico. È possibile definire una classe, una struttura, un'interfaccia, una routine o un delegato generico.
Per ulteriori informazioni sul momento in cui definire un tipo generico, vedere Tipi generici in Visual Basic. Per ulteriori informazioni sui nomi dei parametri di tipo, vedere Nomi di elementi dichiarati.
Regole
Parentesi. Se si specifica un elenco di parametri di tipo, è necessario racchiuderlo tra parentesi e inserire all'inizio la parola chiave Of. Of viene utilizzata una sola volta all'inizio dell'elenco.
Vincoli. Un elenco di vincoli definiti su un parametro di tipo può includere qualsiasi combinazione dei seguenti elementi:
Un numero qualsiasi di interfacce. Il tipo specificato deve implementare ogni interfaccia dell'elenco.
Al massimo una classe. Il tipo specificato deve ereditare da tale classe.
La parola chiave New (Visual Basic). Il tipo specificato deve esporre un costruttore senza parametri a cui possa accedere il tipo generico. Questa caratteristica risulta utile se si vincola un parametro di tipo tramite una o più interfacce. Un tipo che implementa interfacce non espone necessariamente un costruttore. A seconda del livello di accesso del costruttore, è pertanto possibile che il codice all'interno del tipo generico non sia in grado di accedere a tale costruttore.
La parola chiave Class (Visual Basic) o Structure (Visual Basic). Se si include Class, il tipo specificato deve essere un tipo di riferimento. Se si include Structure, il tipo specificato deve essere un tipo di valore. Non è possibile includere Class e Structure nella stessa parte constraintlist.
Il tipo specificato deve soddisfare tutti i requisiti inclusi in constraintlist.
I vincoli definiti su ciascun parametro di tipo sono indipendenti da quelli definiti sugli altri parametri di tipo.
Comportamento
Sostituzione in fase di compilazione. Quando si crea un tipo costruito da un elemento di programmazione generico, viene specificato un tipo definito per ciascun parametro di tipo. Il compilatore Visual Basic sostituisce il tipo specificato per ogni ricorrenza di typename all'interno dell'elemento generico.
Assenza di vincoli. Se non si specifica alcun vincolo su un parametro di tipo, il codice è limitato alle operazioni e ai membri supportati dal Tipo di dati Object per tale parametro.
Esempio
Nell'esempio riportato di seguito viene illustrata la definizione di base di una classe dizionario generica, che comprende una funzione di base per l'aggiunta di una nuova voce al dizionario.
Public Class dictionary(Of entryType, keyType As {IComparable, IFormattable, New})
Public Sub add(ByVal et As entryType, ByVal kt As keyType)
Dim dk As keyType
If kt.CompareTo(dk) = 0 Then
End If
End Sub
End Class
Poiché dictionary è generico, il codice che lo utilizza può creare a partire da tale elemento una vasta gamma di oggetti, ciascuno con le stesse funzionalità ma con effetto su tipi di dati diversi. Nell'esempio riportato di seguito viene illustrata una riga di codice che crea un oggetto dictionary con voci String e chiavi Integer.
Dim dictInt As New dictionary(Of String, Integer)
Nell'esempio riportato di seguito viene illustrata la definizione di base equivalente generata dall'esempio precedente.
Public Class dictionary
Public Sub add(ByVal et As String, ByVal kt As Integer)
Dim dk As Integer
If kt.CompareTo(dk) = 0 Then
End If
End Sub
End Class
Vedere anche
Attività
Procedura: utilizzare una classe generica
Concetti
Livelli di accesso in Visual Basic