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

jmb*_*ano 4 vbscript

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

MC *_* ND 8

简而言之,没有

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

Class CTest
    ....
End Class

Dim oTest, mElement
    Set oTest = New CTest
    ....
    For Each mElement In oTest
        ....
    Next 
Run Code Online (Sandbox Code Playgroud)

班级必须遵循一些规则.我们需要透露这个类

  • 一个名为的公共只读属性 Count

  • 一个名为的公共默认方法 Item

  • 一个名为的public readonly属性_NewEnum,它应该返回一个实现
    IUnknown接口的对象的IEnumVARIANT接口,并且必须具有hidden属性和dispatch ID为-4

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

所以,这不可能做到

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

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

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