我想在VB6上实现这个算法。
Sub Main()
dim stringVal1 as string, stringVal2 as string
dim getOne as boolean
stringVal1 = "FunctOne"
stringVal2 = "FunctTwo"
if getOne then
'Call Function with function name assigned to stringVal1 ... how to call the function here?**
else
'Call Function with function name assigned to stringVal1 ... how to call the function here?**
end if
End Sub
Function FunctOne()
Msgbox "I'm function one"
End Function
Function FunctTwo()
Msgbox "I'm function two"
End Function
可以在VB6中完成吗?
答案 0 :(得分:9)
通常,此类代码模式指向软件设计中的错误。
在极少数情况下,确实需要这样做, CallByName
可以实现这一目标。
示例:
Call CallByName(Me, "NameOfFunction", vbMethod, arguments)
答案 1 :(得分:0)
如果您提供有关您需要通过其名称的字符串表示形式调用函数的原因的更多信息,将会有所帮助。你能不能简单地重写这样的代码:
If getOne Then
Call FuncOne()
Else
Call FuncTwo()
End If
答案 2 :(得分:0)
通常,您不希望基于字符串实际调度。这很容易出错(因为你必须在运行时确定你的String有你想要的函数名),而且真的没必要。你希望能够“传入”你想要使用的方法的方法就是使用VB所拥有的多态,并为每个实现使用一个单独的类。
在您用于界面的类模块中,例如名为Unknown top-level key in JSON request : group...
:
MyInterface
然后,创建两个类模块,每个模块用于接口的每个可能实现:
在Public Sub DoStuff()
End Sub
:
MyClassOne
然后,在Implements MyInterface
Public Sub MyInterface_DoStuff()
Msgbox "I'm function one"
End Sub
,同样的事情,但与你的其他实现:
MyClassTwo
要使用它,您只需传递要使用的实现:
Implements MyInterface
Public Sub MyInterface_DoStuff()
Msgbox "I'm function two"
End Sub
您需要改为存储Private Sub UseInterface(WhichThingToUse as MyInterface)
WhichThingToUse.DoStuff
End Sub
或New MyClassOne
,而不是使用String变量来存储要使用的方法。您没有展示如何设置New MyClassTwo
变量,但无论逻辑是什么,您只需要更改为存储MyInterface的实例,并直接使用它。
要在MSDN库中进一步阅读: