Question

J'ai du code VB (en fait VBA) qui est fondamentalement le même, à l'exception du type sur lequel il fonctionne.Puisque je pense que le principe DRY est un bon principe directeur pour le développement de logiciels, je souhaite écrire une routine pour tous les différents types sur lesquels il faut opérer.Par exemple, si j'avais deux extraits de code comme ceux-ci :

Dim i as Obj1
Set i = RoutineThatReturnsObj1()
i.property = newvalue

Dim i as Obj2
Set i = RoutineThatReturnsObj2()
i.property = newvalue

J'aimerais avoir quelque chose comme ceci pour gérer les deux instances :

Sub MyRoutine(o as ObjectType, r as RoutineToInitializeObject, newvalue as value) 
   Dim i as o
   Set i = r
   i.property = newvalue
End Sub

Si j'utilisais C++, je générerais un modèle et n'en dirais pas plus.Mais j'utilise VBA.Je suis presque sûr qu'il n'y a pas de fonctionnalités telles que les modèles C++ dans la définition du langage VBA, mais existe-t-il d'autres moyens par lesquels je pourrais obtenir le même effet ?Je suppose que la réponse est non, mais je pose la question ici car il y a peut-être une fonctionnalité de VBA que j'ai manquée.

Était-ce utile?

La solution

Il n'y a rien dans VB6 qui fera cela.Si vous effectuez une mise à jour vers Visual Studio Tools pour Office avec .Net, vous pouvez utiliser des génériques :

Function MyRoutine(Of O)(R As Delegate, newvalue As Object) As O
    Dim i As O = CType(r.Method.Invoke(Nothing, Nothing), O)

    'you need another parameter to tell it which property to use'
    ' and then use reflection to set the value'
    i.property = newvalue 
    return i
End Function
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top