Elenco dei tipi (Visual Basic)
Specifica i parametri di tipo per un elemento di programmazione generico. Nel caso di più parametri, è possibile separarli mediante virgole. Di seguito è riportata la sintassi di un parametro di tipo.
[genericmodifier] typename [ As constraintlist ]
Parti
Argomento |
Definizione |
genericmodifier |
Facoltativo. Può essere utilizzato solo in interfacce e delegati generici. È possibile dichiarare una covariante del tipo utilizzando la parola chiave Out oppure una controvariante utilizzando la parola chiave In. Vedere Covarianza e controvarianza (C# e Visual Basic). |
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 |
Facoltativo. 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 (Visual Basic). Per ulteriori informazioni sui nomi dei parametri di tipo, vedere Nomi di elementi dichiarati (Visual Basic).
Regole
Parentesi. Se si specifica un elenco di parametri di tipo, è necessario racchiuderlo tra parentesi e farlo precedere dalla 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.
Parola chiave New. 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 o Structure. La parola chiave Class vincola un parametro di tipo generico forzandolo a richiedere che qualsiasi argomento di tipo passato sia un tipo di riferimento, ad esempio una stringa, una matrice, un delegato o un oggetto creato da una classe. La parola chiave Structure vincola un parametro di tipo generico forzandolo a richiedere che qualsiasi argomento di tipo passato sia un tipo di valore, ad esempio una struttura, un'enumerazione o un tipo di dati elementare. 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 (Visual Basic)
Riferimenti
Istruzione Function (Visual Basic)
In (modificatore generico) (Visual Basic)
Out (modificatore generico) (Visual Basic)
Concetti
Livelli di accesso in Visual Basic