如何让我的自定义 class 与 For Each 兼容?

How do I make my custom class compatible with For Each?

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

总之,没有

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

的东西
Class CTest
    ....
End Class

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

class 必须遵守一些规则。我们需要 class 来公开

  • A public 只读 属性 调用 Count

  • 一个 public 默认方法调用 Item

  • A public 只读 属性 调用了 _NewEnum,应该 return 和
    IUnknown 实现 IEnumVARIANT 接口的对象的接口,并且 必须具有隐藏属性和 -4

    [=47 的调度 ID =]

从这个列表或要求来看,VBScript 不包括任何方式来指示 属性 的调度 ID 或隐藏属性。

所以,这是做不到的

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

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

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