【发布时间】:2011-08-11 17:22:54
【问题描述】:
我正在excel-vba 的一个项目中工作,我有许多用于从各种来源查询数据的类。由于这些类相似,我试图确定使用通用接口和使用Implements 语句对我来说是否是一个可行的选择。总的来说,我对 OOP 相当陌生(尽管我正在尝试用非 VBA 语言学习),而且我知道 VBA 中的 OOP 有很多不足之处。
我一直在阅读的信息基本上表明您设置了您的接口类,我们将其称为IBaseInfo:
Public Property Let LocationData(ByRef locDATA As udtLocData)
End Property
Public Property Let ReferenceDate(ByVal dteDATE As Date)
End Property
然后你实际上在你的类中实现IBaseInfo,我们称之为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 中的一组类设置一组通用接口? Implements 是要走的路吗,如果是这样,我做错了什么?
通过不同的对象访问属性似乎违反直觉。如果clsRate5pt 正在“实现”接口,难道不应该有办法通过clsRate5pt 访问这些属性吗?
【问题讨论】:
标签: excel-vba vba vba interface polymorphism