0

去年夏天结束时,我开始为工作学习 VBA,我可以自豪地说这是我第一次无法在 Google 上找到答案。本周我开始自学有关课程的知识,并且遇到了一种情况,我希望能够为我的课程识别“索引属性”。

由于这可能不是最清楚的解释,这里是一个假设的例子:

我为我的超级棒的三明治店 (clsSASS) 创建的类包含卡路里、克重、价格和成分的属性。前三个是具有非常直接的 let 和 get 语句的变量。IE:

Public pCal As Integer 

Public Property Get Calories() As Integer
    Calories= pCal
End Property

Public Property Let Calories(Value As Integer)
    pCal = Value
End Property

然而,成分被设计为包含按条目顺序排列的成分列表。我最初的直觉是做这样的事情:

Public pIngd  As Collection

Public Property Get Ingredients(Value As Integer) As Collection
    Ingredients = pIngd(Value)
End Property

Public Property Set Ingredients(Object As Collection)
    Set pIngd = Object
End Property

因此,如果培根是列表中的第一个成分(老实说,它总是如此),类似 clsNewSandwich.Ingredients(1) 的东西会返回字符串“培根”。

当我将容器属性添加到类中时出现了问题,然后无法弄清楚如何识别容器中的各个项目。所以这可能只是一个与类无关的简单语法问题。

非常感谢!

*为清晰/连续性编辑

4

1 回答 1

3

好的 - 我将收回我关于始终命名 let/set 和 Get 相同的建议,因为在这种情况下你不能,因为“输入”和“输出”类型不一样。因此,在下面的示例中,我将只返回一种成分的属性命名为Ingredient

“clsSASS”类:

Dim pIngd As Collection

Property Set Ingredients(c As Collection)
    Set pIngd = c
End Property

Property Get Ingredient(v As Integer) As String
    Ingredient = pIngd(v)
End Property

常规模块:

Sub Tester()
Dim c As New Collection
Dim s As New clsSASS

    c.Add "bacon"
    c.Add "lettuce"
    c.Add "tomato"

    Set s.Ingredients = c

    Debug.Print s.Ingredient(1) 'bacon
    Debug.Print s.Ingredient(2) 'lettuce
    Debug.Print s.Ingredient(3) 'tomato

End Sub
于 2013-06-05T20:24:01.360 回答