如何使我的自定义类与For Each兼容?

时间:2015-05-11 18:55:07

标签: vbscript

是否可以使纯粹在VBScript中实现的自定义容器类(没有COM对象)与For Each语句一起使用?如果是这样,我必须公开哪些方法?

1 个答案:

答案 0 :(得分:7)

简而言之,没有

为什么呢?创建一个可枚举的集合类来获得类似

的东西
Class CTest
    ....
End Class

Dim oTest, mElement
    Set oTest = New CTest
    ....
    For Each mElement In oTest
        ....
    Next 

班必须遵循一些规则。我们需要这个类来公开

  • 名为Count

  • 的公共只读属性
  • 名为Item

  • 的公共默认方法
  • 名为_NewEnum的公共只读属性,应返回
    IUnknown实现IEnumVARIANT接口的对象的接口,必须具有隐藏属性且发送ID为-4

根据此列表或要求,VBScript不包含任何指示属性的调度ID或隐藏属性的方法。

所以,这不可能做到

枚举存储在容器类中的元素的唯一方法是使用返回的属性(或方法)

  • 支持所有指定要求的对象,通常是用于保存元素的相同对象(快速,但会暴露太多信息)

  • 一个数组(在VBScript数组中可以枚举)保存对容器中每个元素的引用(如果需要在调用时生成数组,但不返回任何非必需信息,则缓慢)