我已经知道你在VB6中创建了一个接口。 实现接口的类必须实现所有例程。 有没有办法创建类似抽象类的东西,可以实现一些例程。 派生类必须实现抽象例程,并且可以覆盖抽象类已经实现的例程。
请注意我们正在谈论VB6而不是VB.NET或其他任何内容。 谢谢
答案 0 :(得分:0)
答案 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
+ Cancel
和AfterXxx
事件设计基础。您可以下沉多个基础并进行协调。