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.

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top