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.

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top