Ответ 1
Из вашего кода функция 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>
, как вы ожидали.
Загрузите простое демо или промежуточная демонстрация здесь