Elenco dei tipi (Visual Basic)
Specifica i parametri di tipo per un elemento di programmazione generico. Più parametri vengono separati da virgole. Di seguito è riportata la sintassi per un parametro di tipo.
Sintassi
[genericmodifier] typename [ As constraintlist ]
Parti
Termine | Definizione |
---|---|
genericmodifier |
Facoltativo. Può essere usato solo in interfacce e delegati generici. È possibile dichiarare un tipo covariante usando la parola chiave Out o controvariante usando la parola chiave In. Vedere Covarianza e controvarianza. |
typename |
Obbligatorio. Nome del parametro di tipo. Si tratta di un segnaposto da sostituire con un tipo definito fornito dall'argomento di tipo corrispondente. |
constraintlist |
Facoltativo. Elenco dei requisiti che vincolano il tipo di dati che può essere fornito per typename . Se sono presenti più vincoli, racchiuderli tra parentesi graffe ({ } ) e separarli con virgole. È necessario introdurre l'elenco di vincoli con la parola chiave As. Si usa As una sola volta, all'inizio dell'elenco. |
Osservazioni:
Ogni elemento di programmazione generico deve accettare almeno un parametro di tipo. Un parametro di tipo è un segnaposto per un tipo specifico (un elemento costruito) che il codice client specifica quando crea un'istanza del tipo generico. È possibile definire una classe, una struttura, un'interfaccia, una routine o un delegato generico.
Per altre informazioni su quando definire un tipo generico, vedere Tipi generici in Visual Basic. Per altre 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 ed è necessario introdurre l'elenco con la parola chiave Of. Si usa
Of
una sola volta, all'inizio dell'elenco.Vincoli. Un elenco di vincoli su un parametro di tipo può includere gli elementi seguenti in qualsiasi combinazione:
Numero qualsiasi di interfacce. Il tipo fornito deve implementare ogni interfaccia in questo elenco.
Al massimo una classe. Il tipo fornito deve ereditare da tale classe.
La parola chiave
New
. Il tipo fornito deve esporre un costruttore senza parametri a cui può accedere il tipo generico. Ciò è utile se si vincola un parametro di tipo da una o più interfacce. Un tipo che implementa le interfacce non espone necessariamente un costruttore e, a seconda del livello di accesso di un costruttore, il codice all'interno del tipo generico potrebbe non essere in grado di accedervi.Parola chiave
Class
o parola chiaveStructure
. La parola chiaveClass
vincola un parametro di tipo generico per richiedere che qualsiasi argomento di tipo passato sia un tipo riferimento, ad esempio una stringa, una matrice o un delegato o un oggetto creato da una classe. La parola chiaveStructure
vincola un parametro di tipo generico per richiedere che qualsiasi argomento di tipo passato sia un tipo valore, ad esempio una struttura, un'enumerazione o un tipo di dati elementare. Non è possibile includere siaClass
cheStructure
nello stesso oggettoconstraintlist
.
Il tipo fornito deve soddisfare ogni requisito incluso in
constraintlist
.I vincoli per ogni parametro di tipo sono indipendenti dai vincoli per altri parametri di tipo.
Comportamento
Sostituzione in fase di compilazione. Quando si crea un tipo costruito da un elemento di programmazione generico, si specifica un tipo definito per ogni parametro di tipo. Il compilatore Visual Basic sostituisce il tipo fornito per ogni occorrenza di
typename
all'interno dell'elemento generico.Assenza di vincoli. Se non si specificano vincoli per un parametro di tipo, il codice è limitato alle operazioni e ai membri supportati dal Tipo di dati oggetto per tale parametro di tipo.
Esempio 1
Nell'esempio seguente viene illustrata una definizione skeleton di una classe di dizionario generico, inclusa una funzione skeleton per aggiungere 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
Esempio 2
Poiché dictionary
è generico, il codice che lo usa può creare un'ampia gamma di oggetti da esso, ognuno con la stessa funzionalità, ma operando su un tipo di dati diverso. Nell'esempio seguente 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)
Esempio 3
Nell'esempio seguente viene illustrata la definizione di skeleton 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