Dal codice, la funzione g accetta un parametro stringa e restituisce una stringa. Vi suggerisco di creare un modulo di classe chiamato IStringFunction ad agire come la definizione di un'interfaccia che tutte le funzioni sosterrà, in tal modo:
modulo di classe: IStringFunction
Public Function Evaluate(ByVal s As String) As String
End Function
Poi, crea un paio di esempi di funzioni implementa questa interfaccia: Modulo
Classe: HelloStringFunction
Implements IStringFunction
Public Function IStringFunction_Evaluate(ByVal s As String) As String
IStringFunction_Evaluate = "hello " & s
End Function
modulo di classe: GoodbyeStringFunction
Implements IStringFunction
Public Function IStringFunction_Evaluate(ByVal s As String) As String
IStringFunction_Evaluate = "goodbye " & s
End Function
... e, infine, un po 'di codice di prova per esercitare le funzioni di:
(Standard) Modulo: test
Sub Test()
Dim oHello As New HelloStringFunction
Dim oGoodbye As New GoodbyeStringFunction
MsgBox Evaluate(oHello, "gary")
MsgBox Evaluate(oGoodbye, "gary")
End Sub
Private Function Evaluate(ByVal f As IStringFunction, ByVal arg As String) As String
Evaluate = f.Evaluate(arg)
End Function
Nota che la classe che implementa l'interfaccia deve avere metodi denominati <Interface>_<Method>
come nell'esempio sopra, non solo <Method>
come ti aspetteresti.
Scaricare il simple demo o intermediate demo qui
fonte
2009-07-13 09:00:55
Questo non lo aiuta, perché deve ancora scrivere una funzione di valutazione separata per ogni classe. – Treb
@Treb: forse non capisco la domanda, ma non vedo cosa intendi. Ogni classe rappresenta una funzione diversa, quindi ovviamente deve avere una funzione di valutazione separata! Forse se il problema potesse essere ribadito sarebbe più chiaro. –
Ciao, penso che questa sia la risposta giusta. Questo è il modo di farlo in oo-lingue, semplicemente non lo sapevo, che le interfacce esistono in VBA - colpa mia. Ricordo di aver visto questa tecnica la prima volta in * un po 'di java *. Ma devo testare la soluzione proposta. Al momento ho ricevuto un messaggio di errore per non implementare l'interfaccia. Funzione Pubblica applicare (ByVal tmp come variante) come booleano End Function --- Utensili IBooleanFunction Funzione Pubblica applicare (ByVal tmp come variante) come booleano applicano = Application.IsText (tmp) End Function –