En Visual Basic, on peut utiliser le paramètre ParamArray pour passer un nombre variable d'arguments à une procédure ou une fonction. C'est un moyen pratique de créer des méthodes avec un nombre non fixe de paramètres d'un seul type.
Sub ShowNumbers(ParamArray numbers() As Integer) For Each n As Integer In numbers Console.WriteLine(n) Next End Sub ' Appels : ShowNumbers(1, 2, 3, 4) ShowNumbers() ' appel possible sans arguments
ParamArray peut être seul et seulement en dernier dans la liste.ParamArray sont toujours passés comme un tableau et ne peuvent pas être ByRef.ParamArray permet à une procédure d'accepter un nombre différent de paramètres d'un même type, tandis que la surcharge crée plusieurs méthodes avec des signatures différentes.
Exemple de surcharge:
Sub Add(a As Integer, b As Integer) ' ... End Sub Sub Add(a As Integer, b As Integer, c As Integer) ' ... End Sub
Quand utiliser:
ParamArray: lorsque les paramètres sont nombreux d'un même type.Question: Une procédure peut-elle contenir à la fois ParamArray et d'autres paramètres, quelles sont les limitations sur leur ordre?
Réponse: Oui, elle peut, mais ParamArray doit nécessairement être le dernier paramètre et il ne peut y en avoir qu'un seul dans la signature de la fonction.
Exemple d'utilisation incorrecte :
Sub Test(ParamArray x() As Integer, y As String) ' Erreur de compilation End Sub
Version correcte :
Sub Test(y As String, ParamArray x() As Integer) ' Correct End Sub
Histoire
Une fonction a été construite pour collecter des données à partir de différentes sources avec ParamArray, mais dans de nombreux cas, des tableaux étaient transmis manuellement. Le développeur n'a pas remarqué que le passage d'un tableau entraînait un tableau imbriqué (tableau de tableaux), ce qui a conduit à un traitement incorrect et à la détérioration des données de reporting.
Histoire
Pour la construction universelle de requêtes SQL, un ParamArray d'arguments String a été utilisé, mais lors de la mise à jour de la méthode, un paramètre obligatoire a été ajouté après le ParamArray. Tout le système a cessé de compiler.
Histoire
Pour la surcharge de méthodes avec différents ensembles de paramètres, tant ParamArray que Overloading ont été utilisés. Cela a conduit à des collisions d'ambiguïté : le compilateur ne pouvait pas toujours déterminer quelle version de la méthode appeler, car ParamArray correspondait à plusieurs surcharges à la fois.