Comment : définir une classe qui fournisse des fonctionnalités identiques pour différents types de données (Visual Basic)

Vous pouvez définir une classe à partir de laquelle vous pouvez créer des objets qui fournissent des fonctionnalités identiques sur différents types de données. Pour ce faire, vous spécifiez un ou plusieurs paramètres de type dans la définition. La classe peut servir ensuite de modèle aux objets qui utilisent divers types de données. Une classe ainsi définie est appelée classe générique.

L'avantage de définir une classe générique est que vous la définissez une seule fois, et votre code peut l'utiliser pour créer plusieurs objets qui utilisent divers types de données. Cela se traduit par de meilleures performances que si vous définissez la classe avec le type Object.

En plus des classes, vous pouvez également définir et utiliser des structures, des interfaces, des procédures et des délégués génériques.

Pour définir une classe avec un paramètre de type

  1. Définissez normalement la classe.

  2. Ajoutez le (Of ParamètreDeType) immédiatement après le nom de la classe pour spécifier un paramètre de type.

  3. Si vous disposez de plusieurs paramètres de type, créez une liste avec la virgule comme séparateur à l'intérieur des parenthèses. Ne répétez pas le mot clé Of.

  4. Si votre code exécute des opérations sur un paramètre de type autre qu'une simple assignation, faites suivre ce paramètre de type d'une clause As pour ajouter une ou plusieurs contraintes. Une contrainte garantit que le type fourni pour ce paramètre de type satisfait les exigences suivantes :

    • prise en charge d'une opération, par exemple >, que votre code exécute ;

    • prise en charge d'un membre, par exemple une méthode, auquel votre code accède ;

    • exposition d'un constructeur sans paramètre.

    Si vous ne spécifiez pas de contraintes, les seuls opérations et membres que votre code peut utiliser sont ceux pris en charge par leObject, type de données. Pour plus d'informations, consultez Liste de types (Visual Basic).

  5. Identifiez chaque membre de classe qui doit être déclaré avec un type fourni, et déclarez-le As typeparameter. Cela s'applique au stockage interne, aux paramètres de procédure et aux valeurs de retour.

  6. Vérifiez que votre code utilise uniquement des opérations et des méthodes prises en charge par n'importe quel type de données qu'il peut fournir à itemType.

    L'exemple suivant définit une classe qui gère une liste très simple. Cette liste est contenue dans un tableau interne items, et le code d'utilisation peut déclarer le type de données des éléments de la liste. Un constructeur paramétré permet au code d'utilisation de définir la limite supérieure de items, et le constructeur par défaut lui affecte la valeur 9 (pour un total de 10 éléments).

    Public Class simpleList(Of itemType)
      Private items() As itemType
      Private top As Integer
      Private nextp As Integer
      Public Sub New()
        Me.New(9)
      End Sub
      Public Sub New(ByVal t As Integer)
        MyBase.New()
        items = New itemType(t) {}
        top = t
        nextp = 0
      End Sub
      Public Sub add(ByVal i As itemType)
        insert(i, nextp)
      End Sub
      Public Sub insert(ByVal i As itemType, ByVal p As Integer)
        If p > nextp OrElse p < 0 Then
          Throw New System.ArgumentOutOfRangeException("p", 
            " less than 0 or beyond next available list position")
        ElseIf nextp > top Then
          Throw New System.ArgumentException("No room to insert at ", 
            "p")
        ElseIf p < nextp Then
          For j As Integer = nextp To p + 1 Step -1
            items(j) = items(j - 1)
          Next j
        End If
        items(p) = i
        nextp += 1
      End Sub
      Public Sub remove(ByVal p As Integer)
        If p >= nextp OrElse p < 0 Then
            Throw New System.ArgumentOutOfRangeException("p", 
                " less than 0 or beyond last list item")
        ElseIf nextp = 0 Then
            Throw New System.ArgumentException("List empty; cannot remove ", 
                "p")
        ElseIf p < nextp - 1 Then
            For j As Integer = p To nextp - 2
                items(j) = items(j + 1)
            Next j
        End If
        nextp -= 1
      End Sub
      Public ReadOnly Property listLength() As Integer
        Get
          Return nextp
        End Get
      End Property
      Public ReadOnly Property listItem(ByVal p As Integer) As itemType
        Get
          If p >= nextp OrElse p < 0 Then
            Throw New System.ArgumentOutOfRangeException("p", 
              " less than 0 or beyond last list item")
            End If
          Return items(p)
        End Get
      End Property
    End Class
    

    Vous pouvez déclarer une classe de simpleList pour contenir une liste de valeurs Integer, une autre classe pour contenir une liste de valeurs String et une autre pour contenir des valeurs Date. À l'exception du type de données des membres de la liste, les objets créés à partir de toutes ces classes ont un comportement identique.

    L'argument de type que le code d'utilisation fournit à itemType peut être un type intrinsèque tel que Boolean ou Double, une structure, une énumération ou un type de classe, y compris l'un de ceux définis par votre application.

    Vous pouvez tester la classe simpleList à l'aide du code suivant.

    Public Sub useSimpleList()
      Dim iList As New simpleList(Of Integer)(2)
      Dim sList As New simpleList(Of String)(3)
      Dim dList As New simpleList(Of Date)(2)
      iList.add(10)
      iList.add(20)
      iList.add(30)
      sList.add("First")
      sList.add("extra")
      sList.add("Second")
      sList.add("Third")
      sList.remove(1)
      dList.add(#1/1/2003#)
      dList.add(#3/3/2003#)
      dList.insert(#2/2/2003#, 1)
      Dim s = 
        "Simple list of 3 Integer items (reported length " &
         CStr(iList.listLength) & "):" &
         vbCrLf & CStr(iList.listItem(0)) &
         vbCrLf & CStr(iList.listItem(1)) &
         vbCrLf & CStr(iList.listItem(2)) &
         vbCrLf &
         "Simple list of 4 - 1 String items (reported length " &
         CStr(sList.listLength) & "):" &
         vbCrLf & CStr(sList.listItem(0)) &
         vbCrLf & CStr(sList.listItem(1)) &
         vbCrLf & CStr(sList.listItem(2)) &
         vbCrLf &
         "Simple list of 2 + 1 Date items (reported length " &
         CStr(dList.listLength) & "):" &
         vbCrLf & CStr(dList.listItem(0)) &
         vbCrLf & CStr(dList.listItem(1)) &
         vbCrLf & CStr(dList.listItem(2))
      MsgBox(s)
    End Sub
    

Voir aussi

Tâches

Comment : utiliser une classe générique (Visual Basic)

Référence

Of, clause (Visual Basic)

Liste de types (Visual Basic)

Object, type de données

Concepts

Types de données en Visual Basic

Types génériques en Visual Basic (Visual Basic)

CLS (Common Language Specification)