覆盖VB6中的抽象类

时间:2014-08-29 08:57:35

标签: class vb6 override abstract

我已经知道你在VB6中创建了一个接口。 实现接口的类必须实现所有例程。 有没有办法创建类似抽象类的东西,可以实现一些例程。 派生类必须实现抽象例程,并且可以覆盖抽象类已经实现的例程。

请注意我们正在谈论VB6而不是VB.NET或其他任何内容。 谢谢

4 个答案:

答案 0 :(得分:0)

Visual Basic 6不支持实现继承,只支持接口继承。您可以阅读更多相关信息Here。关于VB6中的接口和继承,有一篇很好的文章here可能会引导您在VB6功能中解决问题。

答案 1 :(得分:0)

解决方法(不是解决方案):

例如,接口指定例程A和B,实现第二个例程 派生类的私有成员是接口的实例 例程B的实现只是在其私有成员上调用该方法 当然,我们正在处理2个不同的对象,但在某些情况下,这可能已经足够了。

答案 2 :(得分:0)

我使用的一种解决方法是将基类的实例作为私有成员:

Implements Shape

Dim base as Shape
Dim radius as Single 

Public Function Shape_Area() as Single
  Shape_Area = pi*pi*radius
End Sub

Public Function Shape_PenColour() as Long
  Shape_PenColour = base.PenColour()   ' let the base do its thing
End Function

你可以像这样建立一个层次结构(对于Square):

Implements Shape

Dim base as Rectangle

Public Function Shape_Area() as Single
  Shape_Area = base.Area() ' which is Rectangle.Shape_Area which then calls the Shape.Area
End Sub

这意味着每个班级必须真正了解它所衍生出的那个。这对您来说可能是也可能不是问题。我已经使用它并且效果很好。

这意味着您必须明确地完成更多工作和每个班级

答案 3 :(得分:0)

实施继承被高估,并且几乎总是以复杂的设计结束。

您想要实现的目标(提供基本impl,减少派生类中的重复代码等)可以使用合成和事件来完成

考虑接口IBase

Public Function GetArea() As Double

End Function

interface IDerived

Property Get Base() As IBase

End Property

StdBaseImpl

的常见实施IBase
Implements IBase

Event CustomizeArea(Value As Double)

Public Function GetArea() As Double
    GetArea = 42
    RaiseEvent CustomizeArea(GetArea)
End Function

Private Function IBase_GetArea() As Double
    IBase_GetArea = GetArea
End Function

然后,对于派生类,您使用合成并选择要实现的基本事件

Implements IDerived

Private WithEvents m_oBase As StdBaseImpl

Private Property Get IDerived_Base() As IBase
    Set IDerived_Base = m_oBase
End Property

Private Sub m_oBase_CustomizeArea(Value As Double)
    Value = Value + 10
End Sub

您可以使用BeforeXxx + CancelAfterXxx事件设计基础。您可以下沉多个基础并进行协调。