Procedura: definire insiemi indipendenti dai tipi (Visual Basic)

È possibile definire e creare un insieme utilizzando la classe Collection fornita da Visual Basic, come illustrato nell'esempio seguente.

Public Class widgetRepository
    Public widgetColl As New Microsoft.VisualBasic.Collection()
    ' Insert code to implement additional functionality.
End Class

Questo insieme widgetColl tuttavia non è fortemente tipizzato. È possibile aggiungere qualsiasi tipo di elemento all'insieme e non soltanto oggetti widget. Quando si recupera un elemento, potrebbe rendersi necessario provare a convertirlo in un widget. Ciò può generare problemi di indipendenza dai tipi. Si supponga, ad esempio, di aggiungere un oggetto String all'insieme utilizzando il codice che segue.

Dim notWidget As String = "This is not a widget object!"
widgetColl.Add(notWidget)

In questo caso, qualsiasi tentativo successivo di recuperare tale elemento genera un'eccezione ArgumentException in fase di esecuzione, in quanto l'elemento dell'insieme non è di tipo widget.

Protezione dai problemi di indipendenza dai tipi

Si consiglia di potenziare al massimo l'indipendenza dai tipi definendo una classe generica. Ciò attiva la tipizzazione forte e fornisce inoltre la flessibilità nel tipo di dati particolari che utilizza. Per ulteriori informazioni, vedere Tipi generici in Visual Basic (Visual Basic).

Per definire un insieme indipendente dai tipi in una classe

  • Utilizzare una delle classi generiche nello spazio dei nomi System.Collections.Generic, ad esempio List<T>, per la classe di insiemi. Successivamente è possibile creare un insieme limitato solo ai membri widget. Nell'esempio che segue viene illustrato come è stato possibile modificare la dichiarazione dell'esempio precedente per creare un insieme generico.

    Public widgetColl As New System.Collections.Generic.List(Of widget)
    

    Quando si esegue questa operazione, la tipizzazione forte consente di aggiungere all'insieme solo gli elementi widget e ogni elemento recuperato tramite la proprietà Item è un oggetto widget. Inoltre a causa di questa tipizzazione forte, il codice di recupero può utilizzare tutte le proprietà e i metodi esposti da widget.

    -oppure-

  • Creare una classe di insieme personale senza utilizzare classi predefinite. Limitare il metodo Add ad accettare solo gli oggetti widget e implementare la proprietà Item con un tipo di widget restituito. Per ulteriori informazioni, vedere Procedura: definire insiemi indipendenti dai tipi (Visual Basic).

    Se Item ha restituito elemento di tipo Object, si avrebbe accesso esplicito solo alle proprietà e ai metodi definiti nella classe Object. Per accedere ai membri widget sarebbe necessario disattivare Option Strict Off o utilizzare la Funzione CType (Visual Basic) per convertire esplicitamente l'elemento restituito in widget, come nel codice seguente.

    Dim nextWidget As widget
    Try
        nextWidget = CType(widgetColl.Item(1), widget)
    Catch ex As Exception
        ' Insert code to run if the collection item is not a widget.
    End Try
    

    In entrambi i casi, l'utilizzo di elementi Object in questo caso fa sì che Visual Basic utilizzi l'associazione tardiva, che comporta una riduzione delle prestazioni.

    Si noti che la classe Collection di Visual Basic accetta e restituisce elementi Object, quindi presenta anche gli svantaggi della tipizzazione debole e dell'associazione tardiva.

Vedere anche

Riferimenti

Collection

System.Collections

System.Collections.Generic

System.Collections.Specialized

Istruzione Option Strict

Concetti

Insiemi in Visual Basic

Tipi generici in Visual Basic (Visual Basic)