我有一些VB代码(实际上是VBA),除了它运行的类型外基本相同。由于我认为DRY原则是软件开发的一个很好的指导原则,我想为所有需要操作的不同类型编写一个例程。例如,如果我有两个这样的代码片段:
Dim i as Obj1
Set i = RoutineThatReturnsObj1()
i.property = newvalue
Dim i as Obj2
Set i = RoutineThatReturnsObj2()
i.property = newvalue
我希望有这样的东西来处理这两个实例:
Sub MyRoutine(o as ObjectType, r as RoutineToInitializeObject, newvalue as value)
Dim i as o
Set i = r
i.property = newvalue
End Sub
如果我使用C ++,我会生成一个模板并且不再说它。但我正在使用VBA。我很确定在VBA语言定义中没有像C ++模板这样的功能,但有没有其他方法可以达到同样的效果?我猜这个答案是肯定的,但我在这里问,因为可能有一些我错过的VBA功能。
答案 0 :(得分:1)
VB6中没有任何内容可以做到这一点。如果您使用.Net更新到Office的Visual Studio工具,则可以使用泛型:
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