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
Définissez normalement la classe.
Ajoutez le (Of ParamètreDeType) immédiatement après le nom de la classe pour spécifier un paramètre de type.
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.
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).
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.
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
Concepts
Types de données en Visual Basic