无法在VB6中实现一个类

时间:2010-10-19 12:41:34

标签: vb6

我正在尝试在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'。谁能看到我做错了什么?我的子程序似乎很好,但我尝试的所有功能都有这个问题。

4 个答案:

答案 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中编写极其糟糕的代码。 :)

最佳做法如下:

  1. 接口实例化属性为PublicNotCreatable。
  2. 已实施的接口方法的范围为私有。
  3. 因此:

    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)