Domanda
Ho del codice VB (in realtà VBA) che è sostanzialmente lo stesso tranne che per il tipo su cui opera.Poiché penso che il principio DRY sia un buon principio guida per lo sviluppo del software, voglio scrivere una routine per tutti i diversi tipi su cui è necessario operare.Ad esempio, se avessi due frammenti di codice come questi:
Dim i as Obj1
Set i = RoutineThatReturnsObj1()
i.property = newvalue
Dim i as Obj2
Set i = RoutineThatReturnsObj2()
i.property = newvalue
Mi piacerebbe avere qualcosa di simile per gestire entrambe le istanze:
Sub MyRoutine(o as ObjectType, r as RoutineToInitializeObject, newvalue as value)
Dim i as o
Set i = r
i.property = newvalue
End Sub
Se utilizzassi C++ genererei un modello e non direi altro al riguardo.Ma sto usando VBA.Sono abbastanza sicuro che non ci siano funzionalità come i modelli C++ nella definizione del linguaggio VBA, ma esistono altri mezzi con cui potrei ottenere lo stesso effetto?Immagino che la risposta sia no, ma lo chiedo qui perché forse c'è qualche funzionalità di VBA che mi è sfuggita.
Soluzione
Non c'è niente in VB6 che possa farlo.Se esegui l'aggiornamento a Visual Studio Tools per Office con .Net puoi utilizzare i generici:
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