2008-09-08 5 views
2

J'ai un certain code VB (en fait VBA) qui est fondamentalement le même, sauf pour le type sur lequel il fonctionne. Puisque je pense que le principe DRY est un bon principe directeur pour le développement de logiciel, je veux écrire une routine pour tous les différents types qui doivent être opérés. Par exemple, si j'avais deux extraits de code comme ceux-ci:Modèles Dans VB

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

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

Je voudrais avoir quelque chose comme ça pour gérer les deux cas:

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érons une modèle et n'en dire plus à ce sujet. Mais j'utilise VBA. Je suis assez sûr qu'il n'y a aucune capacité comme des modèles de C++ dans la définition de langue de VBA mais est-ce qu'il y a d'autres moyens par lesquels je pourrais réaliser le même effet? Je suppose que la réponse est non, mais je demande ici parce que peut-être il y a une caractéristique de VBA que j'ai manqué.

Répondre

1

Rien dans VB6 ne le fera. 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