2011-08-11 96 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 
相關問題