Elenco dei tipi (Visual Basic)
Specifica i parametri di tipo per un elemento di programmazione generico . Più parametri sono separati da virgole. Di seguito è riportata la sintassi per un parametro di tipo.
Sintassi
[genericmodifier] typename [ As constraintlist ]
Parti
Termine | Definizione |
---|---|
genericmodifier |
Facoltativa. Può essere usato solo nelle interfacce generiche e nei delegati. È possibile dichiarare un tipo covariante usando la parola chiave Out o il controvariante usando la parola chiave In . Vedere Covarianza e controvarianza. |
typename |
Obbligatorio. Nome del parametro di tipo. Si tratta di un segnaposto da sostituire da un tipo definito fornito dall'argomento di tipo corrispondente. |
constraintlist |
Facoltativa. 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 dei vincoli con la parola chiave As . Si usa As una sola volta all'inizio dell'elenco. |
Commenti
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 generica, una struttura, un'interfaccia, una routine o un delegato.
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 elemento dichiarati.
Regole
Parentesi. Se si specifica un elenco di parametri di tipo, è necessario racchiuderlo tra parentesi e è 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:
Qualsiasi numero 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 limita un parametro di tipo per 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.Class
Parola chiave oStructure
parola chiave. LaClass
parola chiave limita un parametro di tipo generico per richiedere che qualsiasi argomento di tipo passato sia un tipo di riferimento, ad esempio una stringa, una matrice o un delegato o un oggetto creato da una classe. LaStructure
parola chiave limita un parametro di tipo generico per 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 entrambiClass
eStructure
nello stessoconstraintlist
oggetto .
Il tipo fornito deve soddisfare ogni requisito incluso in
constraintlist
.I vincoli per ogni parametro di tipo sono indipendenti dai vincoli di altri parametri di tipo.
Comportamento
Compile-Time sostituzione. Quando si crea un tipo costruito da un elemento di programmazione generico, viene fornito un tipo definito per ogni parametro di tipo. Il compilatore Visual Basic sostituisce il tipo fornito per ogni occorrenza dell'elemento
typename
generico.Assenza di vincoli. Se non si specificano vincoli su 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 di scheletro di una classe dizionario generica, inclusa una funzione scheletro 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 ha la stessa funzionalità ma agisce su un tipo di dati diverso. Nell'esempio seguente viene illustrata una riga di codice che crea un dictionary
oggetto con String
voci e Integer
chiavi.
Dim dictInt As New dictionary(Of String, Integer)
Esempio 3
Nell'esempio seguente viene illustrata la definizione di scheletro 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