Desde su código, la función g toma un parámetro de cadena y devuelve una cadena. Sugiero crear un módulo de clase llamado IStringFunction para actuar como la definición de una interfaz que todas las funciones apoyarán, por lo tanto:
módulo de clase: IStringFunction
Public Function Evaluate(ByVal s As String) As String
End Function
A continuación, crea un par de ejemplos de funciones la implementación de esta interfaz:
módulo de clase: HelloStringFunction
Implements IStringFunction
Public Function IStringFunction_Evaluate(ByVal s As String) As String
IStringFunction_Evaluate = "hello " & s
End Function
módulo de clase: GoodbyeStringFunction
Implements IStringFunction
Public Function IStringFunction_Evaluate(ByVal s As String) As String
IStringFunction_Evaluate = "goodbye " & s
End Function
... y, finalmente, un código de prueba para ejercer las funciones:
(Estándar) Módulo: Prueba
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 que la clase que implementa la interfaz debe tener métodos llamados <Interface>_<Method>
como en el ejemplo anterior, no solo <Method>
como era de esperar.
Descargar el simple demo o intermediate demo aquí
Eso realmente no lo ayuda, porque todavía tiene que escribir una función de evaluación separada para cada clase. – Treb
@Treb: tal vez no entiendo la pregunta, pero no entiendo a qué te refieres. Cada clase representa una función diferente, ¡así que por supuesto tiene que tener una función de evaluación por separado! Tal vez si el problema pudiera ser reescrito sería más claro. –
Hola, creo que esta es la respuesta correcta. Esta es la manera de hacerlo en oo-languages, simplemente no sabía, que las interfaces existen en VBA - mi culpa. Recuerdo haber visto esta técnica la primera vez en * un poco de java *. Pero tengo que probar la solución propuesta. En este momento recibí un mensaje de error acerca de no implementar la interfaz. Función Pública aplica (tmp ByVal como Variant) As Boolean Función Fin --- Implementa IBooleanFunction Función Pública aplicable (ByVal tmp como variante) As Boolean = aplican Application.IsText (TMP) End Function –