vba - 有没有办法为 VBA 中的一组类设置一组通用属性?

标签 vba interface polymorphism

我在 做一个项目我有许多类用于从各种来源查询数据。由于这些类相似,我试图确定是否使用通用接口(interface)并使用 Implements声明对我来说是一个可行的选择。一般来说,我对 OOP 相当陌生(尽管我正在尝试用非 VBA 语言学习),而且我知道 VBA 中的 OOP 有很多不足之处。

我一直在阅读的信息基本上表明您设置了接口(interface)类,我们将其称为 IBaseInfo :

Public Property Let LocationData(ByRef locDATA As udtLocData)
End Property

Public Property Let ReferenceDate(ByVal dteDATE As Date)
End Property

然后你实际执行 IBaseInfo在您的类(class)中,我们将其称为 clsRate5pt :

Implements IBaseInfo

Private Property Let IBaseInfo_LocationData(Byref RHS As udtLocData)

End Property

Private Property Let IBaseInfo_ReferenceDate(ByVal RHS As Date)

End Property

我感到困惑的地方是我如何从模块中的对象级别实际访问属性。我从 msdn 的 VBA 多态性引用资料中得到了什么是我需要实际声明一个 IBaseInfo 类型的变量, 将其设置为 clsRate5pt 类型的对象并通过该变量访问属性。如:

Sub TestIFace()

    Dim o5PT As clsRate5Pt
    Dim oInfo As IBaseInfo

    Set o5PT = New clsRate5Pt
    Set oInfo = o5PT

    oInfo.LocationData = '// Some location Data
    oInfo.ReferenceDate = '// Some Reference Date

End Sub

有没有办法为 中的一组类设置一组通用接口(interface)? ?是 Implements走的路,如果是这样,我做错了什么?

通过不同的对象访问属性似乎违反直觉。如果 clsRate5pt正在“实现”接口(interface),不应该有办法通过clsRate5pt访问这些属性吗? ?

最佳答案

VBA 不支持继承(“is a”),但支持组合(“has a”),因此您可以在这种情况下使用该方法:

例如:
类“clsSettings”具有您想要在其他类中实现的公共(public)属性和任何必需的属性值检查。

然后,您的其他类有一个“设置”实例,可以公开为:

objRate5pct.Settings.LocationData
objRate5pct.Settings.ReferenceDate

关于vba - 有没有办法为 VBA 中的一组类设置一组通用属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7030179/

相关文章:

charts - Excel VBA - 如何设置图表系列的线条样式?

excel - 将用户窗体文本框值中的更改保存为新的默认值

c# - 返回类实现的接口(interface)类型 C#

java - 我应该如何在Java中实现接口(interface)? [代码正确性]

c++ - 堆栈上的多态对象?

c++ - 为什么这不是多态的?

excel - 如何以格式 12 :07 rather than 12:7? 显示时间

c# - 分配给委托(delegate)的通用方法

c++ - 将对象转换为基类或派生类?

VBA 选择性错误处理