Frage

Ich habe VB-Code (eigentlich VBA), der bis auf den Typ, mit dem er arbeitet, im Grunde derselbe ist.Da ich denke, dass das DRY-Prinzip ein gutes Leitprinzip für die Softwareentwicklung ist, möchte ich eine Routine für alle verschiedenen Typen schreiben, die bearbeitet werden müssen.Wenn ich zum Beispiel zwei Codeausschnitte wie diese hätte:

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

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

Ich hätte gerne so etwas, um beide Fälle zu verarbeiten:

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++ verwenden würde, würde ich eine Vorlage generieren und nichts weiter dazu sagen.Aber ich verwende VBA.Ich bin mir ziemlich sicher, dass es in der VBA-Sprachdefinition keine Funktion wie C++-Vorlagen 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 ich vielleicht eine Funktion von VBA übersehen habe.

War es hilfreich?

Lösung

In VB6 gibt es nichts, was das tun könnte.Wenn Sie mit .Net auf Visual Studio Tools für Office aktualisieren, können Sie generische Elemente 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top