Partager via


Comment : définir des collections de type sécurisé

Mise à jour : novembre 2007

Vous pouvez définir et créer une collection à l'aide de la classe Collection fournie par Visual Basic, comme l'exemple suivant l'illustre.

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

Toutefois, cette collection widgetColl n'est pas fortement typée. Vous pouvez lui ajouter n'importe quel type d'élément, pas seulement des objets widget. Lorsque vous récupérez un élément, vous devrez peut-être le convertir en widget. Cela peut entraîner des problèmes de sécurité de type. Par exemple, supposez que vous ajoutez une String à la collection, à l'aide du code suivant.

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

Dans ce cas, toute tentative ultérieure pour récupérer cet élément lève une exception ArgumentException au moment de l'exécution car l'élément de la collection n'est pas de type widget.

Protection contre les problèmes de sécurité de type

Nous vous recommandons d'optimiser la sécurité de type en définissant une classe générique. Elle permet d'appliquer un typage fort et de fournir une flexibilité dans le type de données particulier qu'elle utilise. Pour plus d'informations, consultez Types génériques en Visual Basic.

Pour définir une collection de type sécurisé dans une classe

  • Utilisez l'une des classes génériques contenues dans l'espace de noms System.Collections.Generic, par exemple List<T>, pour votre classe de collection. Vous pouvez ensuite créer une collection qui est restreinte uniquement aux membres widget. L'exemple suivant explique comment la déclaration dans l'exemple précédent peut être modifiée pour créer une collection générique.

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

    Dans ce cas, le typage fort permet d'ajouter uniquement des éléments widget à la collection, et chaque élément récupéré par l'intermédiaire de la propriété Item est un objet widget. Grâce à ce typage fort, le code de récupération peut utiliser toutes les propriétés et les méthodes exposées par widget.

    - ou -

  • Créez votre propre classe de collection sans utiliser de classes prédéfinies. Appliquez une restriction à votre méthode Add pour accepter uniquement des objets widget, et implémentez votre propriété Item avec le type de retour widget. Pour plus d'informations, consultez Comment : définir des collections de type sécurisé.

    Si Item a retourné des éléments de type Object, vous disposez uniquement d'un accès explicite aux propriétés et aux méthodes définies sur la classe Object. Pour accéder aux membres widget, vous devrez activer Option Strict Off ou utiliser CType, fonction pour convertir explicitement l'élément retourné en widget, comme dans le code suivant.

    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
    

    Dans l'un ou l'autre des cas, l'utilisation d'éléments Object oblige Visual Basic à utiliser une liaison tardive, ce qui altère vos performances.

    Notez que, étant donné que la classe Collection de Visual Basic accepte et retourne des éléments Object, elle présente également les inconvénients du typage faible et de la liaison tardive.

Voir aussi

Concepts

Classe de la collection Visual Basic

Collections en Visual Basic

Types génériques en Visual Basic

Référence

System.Collections

System.Collections.Generic

System.Collections.Specialized

Option Strict, instruction