Pergunta

Eu tenho um pouco de código VB (na verdade VBA) que é basicamente o mesmo, exceto para o tipo em que opera.Desde que eu acho que o princípio DRY é um bom princípio orientador para o desenvolvimento de software, eu quero escrever uma rotina para todos os diferentes tipos que precisa ser operado.Por exemplo, se eu tivesse dois trechos de código como estes:

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

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

Eu gostaria de ter algo assim para lidar com ambas as situações:

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

Se eu estivesse usando o C++ eu gostaria de gerar um modelo e dizer mais sobre isso.Mas eu estou usando VBA.Eu estou bastante certo de que não há capacidade, como o C++ modelos na linguagem VBA definição, mas há outros meios pelos quais eu poderia obter o mesmo efeito?Eu estou supondo que a resposta é não, mas se eu perguntar aqui porque talvez haja algum recurso do VBA que eu perdi.

Foi útil?

Solução

Não há nada em VB6 que irá fazer.Se você atualizar para o Visual Studio Tools para o Office com .Net, você pode 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top