Pregunta
Tengo un poco de código de VB (en realidad VBA) que es básicamente el mismo, excepto para el tipo en el que opera.Ya que creo que el principio SECO es un buen principio rector para el desarrollo de software, quiero escribir una rutina para todos los distintos tipos que se necesita para ser operado.Por ejemplo, si yo tenía dos fragmentos de código como estos:
Dim i as Obj1
Set i = RoutineThatReturnsObj1()
i.property = newvalue
Dim i as Obj2
Set i = RoutineThatReturnsObj2()
i.property = newvalue
Me gustaría tener algo como esto para controlar ambos casos:
Sub MyRoutine(o as ObjectType, r as RoutineToInitializeObject, newvalue as value)
Dim i as o
Set i = r
i.property = newvalue
End Sub
Si estuviera usando C++ me gustaría generar una plantilla y no decir nada más al respecto.Pero estoy usando VBA.Estoy bastante seguro de que no hay capacidad, como las plantillas de C++ en el lenguaje VBA definición pero hay otros medios por los que podría lograr el mismo efecto?Supongo que la respuesta es no pero yo pregunto aquí porque tal vez hay alguna característica de VBA que he echado de menos.
Solución
No hay nada en VB6 que va a hacer que.Si la actualización de Visual Studio Tools para Office con .Net se puede utilizar genéricos:
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