Из вашего кода функция g принимает строковый параметр и возвращает строку. Я предлагаю вам создать модуль класса IStringFunction, который будет действовать как определение интерфейса, который будут поддерживать все функции, таким образом:
Модуль класса: IStringFunction
Public Function Evaluate(ByVal s As String) As String
End Function
Затем создайте пару примеров функций, реализующих этот интерфейс:
Модуль класса: HelloStringFunction
Implements IStringFunction
Public Function IStringFunction_Evaluate(ByVal s As String) As String
IStringFunction_Evaluate = "hello " & s
End Function
Модуль класса: GoodbyeStringFunction
Implements IStringFunction
Public Function IStringFunction_Evaluate(ByVal s As String) As String
IStringFunction_Evaluate = "goodbye " & s
End Function
... и, наконец, тестовый код для выполнения функций:
(Стандартный) Модуль: Тест
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
Обратите внимание, что класс, реализующий интерфейс, должен иметь методы с именем <Interface>_<Method>
, как в примере выше, а не просто <Method>
, как вы ожидаете.
Загрузите простой демо или промежуточный демо здесь