2011-08-11 45 views
3

我正在研究一个项目,其中有许多类用于查询各种来源的数据。由于这些类是相似的,我试图确定是否使用通用接口并使用Implements语句对我来说是一个可行的选项。一般来说,我对OOP相当陌生(尽管我试图用非VBA语言学习),并且我明白VBA中的OOP不会被期望。有没有办法为VBA中的一组类设置一组公共属性?

,我一直在阅读基本信息,指出设置您的接口类,我们将其称为IBaseInfo

Public Property Let LocationData(ByRef locDATA As udtLocData) 

End Property 

Public Property Let ReferenceDate(ByVal dteDATE As Date) 

End Property 

那么你实际上是在你的类,我们将其称为实施IBaseInfoclsRate5pt

Implements IBaseInfo 

Private Property Let IBaseInfo_LocationData(RHS As udtLocData) 

End Property 

Private Property Let IBaseInfo_ReferenceDate(ByVal RHS As Date) 

End Property 

在哪里我感到困惑是我如何实际访问模块中的对象级别的属性。我从VBA多态性参考msdn得到的是我需要实际声明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 

有没有一种方法来设置一组通用的接口,在一组类?是否需要Implements,如果是的话,我做错了什么?

通过不同的对象来访问属性似乎是违反直觉的。如果clsRate5pt是“执行”的界面,不应该有办法通过clsRate5pt访问这些属性?

回答

5

VBA不支持继承(“是”),但不支持组合物(“有”),所以你也许可以使用这种方法在这种情况下:

如: 级“clsSettings”有您希望在其他类中实现的公共属性和任何必需的属性值检查。

你的其他类则有可能被暴露你的“设置”的实例:

objRate5pct.Settings.LocationData 
objRate5pct.Settings.ReferenceDate 
+0

感谢蒂姆......据我了解你,我会做这样的事......'公共财产获取设置()作为clsSettings'实际在课堂上暴露了吗?这似乎更接近我所期待的。感谢您的帮助 –

+0

是的,就是这样。 –

0

对于接口iFooBar

Option Explicit 
Public Property Get Foo() as String 

End Property 

Public Property Get Bar() as String 

End Property 

然后,在你的类(我们称之为cFooBar )

Option Explicit 
Implements iFooBar 

'Other class code 

Public Property Get AsiFooBar() as iFooBar 
    Set AsiFooBar = me 
End Property 

'More code 

然后,您可以引用模块中的iFooBar方法

dim cfb as cFooBar 
set cfb = new cFooBar 
debug.print cfb.AsiFooBar.Foo 
相关问题