Condividi tramite


Classe degli insiemi di Visual Basic

Aggiornamento: novembre 2007

Un insieme consente di raggruppare una serie di elementi correlati. Esistono molti tipi di insiemi. Nelle applicazioni Visual Basic vengono spesso utilizzati gli insiemi predefiniti, ad esempio l'insieme Control.ControlCollection di un oggetto Form, restituito dalla proprietà Controls del form. È anche possibile creare insiemi personalizzati per organizzare e modificare gli oggetti.

Gli insiemi sono utili per tenere traccia degli oggetti di cui potrebbero essere necessarie la creazione e l'eliminazione dinamiche. Nel frammento di codice riportato di seguito viene illustrato come è possibile utilizzare il metodo Add di un oggetto Collection di Visual Basic per mantenere un elenco di oggetti widget creati dall'utente.

' Declare and create the Collection object.
Public widgetColl As New Microsoft.VisualBasic.Collection() 
' Create a new widget and add it to the widgetColl collection.
Private Sub makeAWidget()
    Dim tempWidget As New widget()
    widgetColl.Add(tempWidget) 
End Sub

Nell'esempio precedente l'insieme widgetColl organizza ed espone tutti gli oggetti widget creati mediante la routine makeAWidget. È possibile recuperare i riferimenti a ogni oggetto widget utilizzando l'indice dell'insieme. Le dimensioni dell'insieme vengono modificate automaticamente all'aggiunta di ogni nuovo oggetto widget. Per scorrere l'insieme, è possibile utilizzare l'Istruzione For Each...Next (Visual Basic). Se si desidera assegnare all'oggetto widget una chiave che possa essere utilizzata per recuperarlo, è possibile fornire una stringa di testo come secondo parametro del metodo Add.

Poiché tutti gli elementi dell'oggetto Collection di Visual Basic vengono archiviati con il tipo Object, è possibile aggiungere un elemento di un qualsiasi tipo di dati. Non esiste alcuna misura per impedire l'aggiunta di tipi di dati non appropriati. Per risolvere questo problema, è possibile utilizzare gli insiemi generici dello spazio dei nomi System.Collections.Generic. Per ulteriori informazioni, vedere Procedura: creare un insieme di oggetti.

Creazione ed eliminazione di un oggetto Collection

La parola chiave New (Visual Basic) nella dichiarazione della variabile widgetColl determina la creazione di un oggetto Collection nel momento in cui il controllo passa all'istruzione di dichiarazione. Poiché Collection è una classe e non un tipo di valore, è necessario creare un'istanza della classe e conservare un riferimento a tale istanza in una variabile. L'istanza è un oggetto Collection di Visual Basic.

Come qualsiasi altro oggetto, un oggetto Collection viene contrassegnato per la Garbage Collection quando l'ultima variabile contenente un riferimento a tale oggetto viene impostata su Nothing (Visual Basic) oppure non rientra più nell'ambito. Quando l'oggetto viene recuperato tramite la Garbage Collection, tutti i riferimenti agli oggetti in esso contenuti vengono rilasciati. Per questo motivo, la variabile widgetColl nell'esempio precedente è dichiarata nella classe padre, in modo da essere disponibile per l'intera durata del programma.

Un insieme conserva i riferimenti agli oggetti da esso controllati, ma non contiene gli oggetti stessi. Di conseguenza, l'eliminazione di un oggetto Collection non determina l'eliminazione degli oggetti da questo controllati. Ogni singolo oggetto appartenente all'insieme continuerà a esistere fino a quando non verrà specificatamente contrassegnato per la Garbage Collection.

Utilizzo degli elementi

I servizi di base per l'aggiunta, l'eliminazione e il recupero degli elementi di un insieme dipendono da chiavi e indici. Una chiave è un valore String, che può essere un nome, un numero di patente, un numero di telefono o semplicemente un valore integer convertito in una stringa. Il metodo Add consente di associare una chiave a un elemento, come descritto in Procedura: aggiungere, eliminare e recuperare elementi in un insieme.

Un indice nella classe Collection è un valore integer compreso tra 1 e il numero di elementi dell'insieme. La Proprietà Count (oggetto Collection) restituisce il numero corrente di elementi. Sebbene sia possibile specificare il valore iniziale dell'indice di un elemento utilizzando i parametri Before e After al momento della chiamata del metodo Add, il valore dell'indice potrebbe cambiare a causa dell'aggiunta o dell'eliminazione di altri elementi. Per ulteriori informazioni, vedere Metodo Add (oggetto Collection).

È possibile rimuovere un singolo elemento da un insieme passando la chiave o l'indice dell'elemento al Metodo Remove (oggetto Collection). È possibile svuotare un insieme e rimuoverne tutti gli elementi utilizzando il Metodo Clear (oggetto Collection).

Accesso agli elementi

È possibile passare un valore di chiave al Metodo Contains (oggetto Collection) per verificare se un insieme contiene un elemento con tale chiave. È possibile recuperare un elemento passando la chiave o l'indice dell'elemento alla Proprietà Item (oggetto Collection).

Per scorrere gli elementi di un insieme è possibile utilizzare i valori di indice e la proprietà Item oppure l'Istruzione For Each...Next (Visual Basic). Nell'esempio riportato di seguito vengono illustrati due modi per assegnare un aumento di stipendio del 10% a tutti i dipendenti inclusi in un insieme di oggetti employee, presupponendo che la variabile employeesColl contenga un riferimento a un oggetto Collection.

Option Strict On
' The following alternative uses the Count and Item properties.
Dim emp As employee
For counter As Integer = 1 To employeesColl.Count 
    emp = CType(employeesColl.Item(counter), employee)
    emp.payRate *= 1.1
Next counter
' The following alternative uses the For Each...Next statements.
For Each emp As employee In employeesColl
    emp.payRate *= 1.1
Next emp

Tuttavia, se sono stati aggiunti a employeesColl uno o più elementi non di tipo employee, il ciclo For Each genererà un'eccezione ArgumentException in fase di esecuzione.

Tipo di dati degli elementi

Tutti gli elementi di un oggetto Collection di Visual Basic vengono archiviati con il tipo di dati Object. Di conseguenza, i tipi di dati che possono essere aggiunti a un oggetto Collection corrispondono a quelli che possono essere archiviati in una variabile Object e includono tipi di dati, oggetti e matrici standard, oltre a strutture e istanze di classe definite dall'utente.

Dal momento che ciascun elemento nell'oggetto Collection viene archiviato come Object, la proprietà Item restituisce un valore Object. Per utilizzare l'elemento nel codice, in genere è necessario eseguire la conversione da Object al tipo di dati dell'elemento in fase di esecuzione. Il modo in cui questa operazione viene eseguita dipende dall'impostazione dell'opzione di controllo dei tipi nell'Istruzione Option Strict.

Conversione implicita dal tipo Object

Se Option Strict è impostata su Off, è possibile convertire implicitamente un elemento di Collection nel tipo di dati appropriato, come illustrato nel seguente esempio.

Option Strict Off
Dim sampleColl As New Microsoft.VisualBasic.Collection()
Dim sampleString As String = "This is a string"
Dim aString As String
sampleColl.Add(sampleString)
' The following statements convert the collection item to a string.
Try
    aString = sampleColl.Item(1) 
Catch ex As Exception
    ' Insert code to run if the collection item cannot be converted to String.
End Try

Conversione esplicita dal tipo Object

Se Option Strict è impostata su On, è necessario eseguire una conversione esplicita da Object al tipo di dati dell'elemento in fase di esecuzione. Per ottenere un elemento da Item in questo modo, è possibile utilizzare la Funzione CType per eseguire la conversione, come illustrato nel seguente esempio.

Option Strict On
Dim sampleColl As New Microsoft.VisualBasic.Collection()
Dim sampleString As String = "This is a string"
Dim aString As String
sampleColl.Add(sampleString)
' The following statements convert the collection item to a string.
Try
    aString = CType(sampleColl.Item(1), String) 
Catch ex As Exception
    ' Insert code to run if the collection item cannot be converted to String.
End Try

Servizi aggiuntivi

Le proprietà e i metodi dell'oggetto Collection forniscono soltanto i servizi di base relativi agli insiemi. Il metodo Add, ad esempio, non consente di controllare il tipo di elemento aggiunto a un insieme, operazione necessaria per assicurare che l'insieme contenga un unico tipo di elemento. Se è possibile garantire tale requisito nel metodo Add, si otterrà un insieme fortemente tipizzato e non sarà necessario convertire il valore restituito dalla proprietà Item nel relativo tipo di dati in fase di esecuzione, con conseguente aumento delle prestazioni.

Per fornire una funzionalità più affidabile e aggiungere proprietà, metodi ed eventi, è possibile creare una classe di insiemi personalizzata, come descritto in Procedura: definire insiemi nelle classi.

Vedere anche

Concetti

Insiemi come alternativa alle matrici

Insiemi in Visual Basic

Riferimenti

Oggetto Collection (Visual Basic)