对于我们的项目,该组使用Microsoft Access。 VBA类功能有限。如何使VBA类支持继承?
答案 0 :(得分:5)
VBA 不支持用户定义类的继承。它确实提供了一种接口。
更多信息:
本文包含使用VBA“Implements”接口关键字的示例。 Faking inheritance in VBA to remove code duplication
在SO
答案 1 :(得分:0)
答案 2 :(得分:0)
如前所述,您可以使用VBA进行继承。您可以使用实现强制实施接口。但是,如果您希望类具有另一个类的属性和方法,那么您将获得的最佳方法是使用您要继承的类类型的公共属性。这显然有一些局限性,但它可以达到最佳效果。
一个可悲的例子是:想象一下,你有两个班级。汽车和CarDoor。这是CarDoor:
Option Explicit
Private m_lngID As Long
Private m_strColor As String
Private m_strStyle As String
Public Property Get ID() As Long
ID = m_lngID
End Property
Public Property Get Color() As String
Color = m_strColor
End Property
Public Property Let Color(ByVal strColor As String)
m_strColor = strColor
End Property
Public Property Get Style() As String
Style = m_strStyle
End Property
Public Property Let Style(ByVal strStyle As String)
m_strStyle = strStyle
End Property
Public Sub LoadCarDoor(ByVal ID As Long)
''// Magic lookup procedure here.
End Sub
这是Car:
Option Explicit
Private m_objDriverSideDoor As CarDoor
Private m_lngCarID As Long
Public Property Get DriverSideDoor() As CarDoor
Set DriverSideDoor = m_objDriverSideDoor
End Property
Private Sub Class_Terminate()
Set m_objDriverSideDoor = Nothing
End Sub
Public Property Get CarID() As Long
CarID = m_lngCarID
End Property
Public Property Let CarID(ByVal lngCarID As Long)
m_lngCarID = lngCarID
Set m_objDriverSideDoor = New CarDoor
Me.DriverSideDoor.LoadCarDoor DoorIDFromCarID(Me.CarID)
End Property
Private Function DoorIDFromCarID() As Long
''// Magic lookup on DoorID using Me.CarID
End Function
就像我说的那样,不是很好,但是和你一样好。
答案 3 :(得分:-3)
VBA是脚本语言,而不是功能齐全的编程语言!它从未被设计为支持继承这样的事情,这远远超出了它的预期范围。相反,它旨在成为一个自动化客户端,它可以通过一个COM接口调用二进制组件(这些组件又使用'真实'开发系统,如C,C ++,C#,VB.NET,Delphi)编写。 / p>