我正在尝试在VB6中实现一个接口。我已经像这样定义了类Cast_Speed
......
Public Function Run_Time() As Long
End Function
和这样的实现......
Option Explicit
Implements Cast_Speed
Public Function Cast_Speed_Run_Time() As Long
Cast_Speed_Run_Time = 0
End Function
但是尝试编译它会让'对象模块需要为接口'Cast_Speed'实现'Run_Time'。谁能看到我做错了什么?我的子程序似乎很好,但我尝试的所有功能都有这个问题。
答案 0 :(得分:14)
它不喜欢方法名称中的下划线字符。请尝试使用RunTime()
。
我只是在没有下划线的情况下测试它,它对我来说很好用:
'// class Cast_Speed
Option Explicit
Public Function RunTime() As Long
End Function
'// class Class1
Option Explicit
Implements Cast_Speed
Public Function Cast_Speed_RunTime() As Long
Cast_Speed_RunTime = 0
End Function
答案 1 :(得分:5)
虽然您可以将接口实现公开,但它不被认为是一种好的做法,只是允许直接实例化接口被视为良好做法,您也可以这样做。它只是一个例子,可以在VB6中编写极其糟糕的代码。 :)
最佳做法如下:
因此:
Dim x as iMyInterface
Set x = new MyiMyInterfaceImplementation
x.CalliMyInterfaceMethodA
x.CalliMyInterfaceMethodY
等等。如果有人试图直接实例化接口,那么应该导致错误,并且如果有人试图直接调用实现的方法而不是通过应该返回错误的接口进行多态化。
答案 2 :(得分:2)
除非我弄错了,否则VB6中的接口实现必须是私有的(即使接口将它们声明为公共接口)。
尝试更改:
Public Function Cast_Speed_Run_Time() As Long
要:
Private Function Cast_Speed_Run_Time() As Long
你也可以阅读implementing interfaces in VB6 here(这似乎支持我)。
答案 3 :(得分:1)