2008-09-08 11 views
2

Ich habe einige VB-Code (eigentlich VBA), die im Grunde die gleichen ist, außer für den Typ, auf dem es funktioniert. Da ich glaube, dass das DRY-Prinzip ein guter Leitfaden für die Softwareentwicklung ist, möchte ich eine Routine für alle verschiedenen Typen schreiben, die bearbeitet werden müssen. Zum Beispiel, wenn ich hatte zwei Code-Schnipsel, wie diese:Templates In VB

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

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

ich so etwas wie dies haben möchte beiden Instanzen zu behandeln:

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

Wenn ich C wurde unter Verwendung ++ ich erzeugen würde Vorlage und sagen Sie nichts mehr darüber. Aber ich benutze VBA. Ich bin ziemlich sicher, dass es keine Möglichkeiten wie C++ - Vorlagen in der VBA-Sprachdefinition gibt, aber gibt es andere Mittel, mit denen ich den gleichen Effekt erzielen könnte? Ich schätze, die Antwort ist nein, aber ich frage hier, weil es vielleicht eine Funktion von VBA gibt, die ich vermisst habe.

Antwort

1

Es gibt nichts in VB6, das das tun wird. Wenn Sie mit .Net auf Visual Studio-Tools für Office aktualisieren, können Sie Generics verwenden:

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