强制支持继承

时间:2009-11-20 15:10:43

标签: ms-access vba

对于我们的项目,该组使用Microsoft Access。 VBA类功能有限。如何使VBA类支持继承?

4 个答案:

答案 0 :(得分:5)

VBA 支持用户定义类的继承。它确实提供了一种接口。

更多信息:

  1. 本文包含使用VBA“Implements”接口关键字的示例。 Faking inheritance in VBA to remove code duplication

  2. 在SO

  3. 上查看Hidden features of VBA个问题

答案 1 :(得分:0)

总之,你不能。虽然你可以通过使用Implements关键字来做'模拟'继承 - 有点像.Net中的接口。

答案 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>