Z Twojego kodu funkcja g przyjmuje parametr łańcuchowy i zwraca ciąg znaków. Proponuję utworzyć moduł klasy o nazwie IStringFunction do działania jako definicji interfejsu, że wszystkie funkcje będą wspierać, a więc:
moduł klasy: IStringFunction
Public Function Evaluate(ByVal s As String) As String
End Function
Następnie należy utworzyć kilka przykładowych funkcji wdrożenie tego interfejsu:
Class Moduł: HelloStringFunction
Implements IStringFunction
Public Function IStringFunction_Evaluate(ByVal s As String) As String
IStringFunction_Evaluate = "hello " & s
End Function
moduł klasy: GoodbyeStringFunction
Implements IStringFunction
Public Function IStringFunction_Evaluate(ByVal s As String) As String
IStringFunction_Evaluate = "goodbye " & s
End Function
... i wreszcie, niektóre kodu testu, aby wykonywać funkcje:
(Standard) Moduł: 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
Uwaga że klasa implementująca interfejs musi mieć metody o nazwie <Interface>_<Method>
, jak w powyższym przykładzie, a nie tylko <Method>
, jak można się spodziewać.
Pobierz simple demo lub intermediate demo tutaj
To mu nie pomoże, ponieważ wciąż musi napisać oddzielną funkcję oceny dla każdej klasy. – Treb
@Treb: może nie rozumiem pytania, ale nie rozumiem, co masz na myśli. Każda klasa reprezentuje inną funkcję, więc oczywiście musi mieć oddzielną funkcję oceny! Może gdyby problem mógł zostać powtórzony, byłby jaśniejszy. –
Cześć, myślę, że to jest właściwa odpowiedź. W ten sposób robię to w językach oo, po prostu nie wiedziałem, że interfejsy istnieją w VBA - moja wina. Pamiętam, jak widziałem tę technikę po raz pierwszy w * małym java *. Ale muszę przetestować proponowane rozwiązanie. W tej chwili dostałem komunikat o błędzie dotyczący nie implementowania interfejsu. Public Function Zastosuj (ByVal tmp As Variant) As Boolean Funkcja End --- Wbudowy IBooleanFunction Public Function zastosowania (ByVal tmp jako Variant) As Boolean zastosowanie funkcji = Application.IsText (TMP) End –