我在 excel-vba 做一个项目我有许多类用于从各种来源查询数据。由于这些类相似,我试图确定是否使用通用接口(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
有没有办法为 vba 中的一组类设置一组通用接口(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/