VBScript默认属性有问题

VBScript默认属性有问题,vbscript,properties,Vbscript,Properties,我阅读了Eric Lippert关于VBScript中默认属性语义的文章: 它说: IDispatch::Invoke的实现者的规则是,如果以下所有条件均为真: 调用方调用一个属性 调用者传递一个参数列表 该属性实际上不接受参数列表 该属性返回一个对象 该对象具有默认属性 该默认属性接受一个参数列表 然后使用参数列表调用默认属性。奇怪但真实 从表面上看,这似乎是一条奇怪的规则,但在处理收藏时,这是非常宝贵的。或者至少是这样,但我似乎无法让它发挥作用 class Test1 publi

我阅读了Eric Lippert关于VBScript中默认属性语义的文章:

它说:

IDispatch::Invoke的实现者的规则是,如果以下所有条件均为真:

  • 调用方调用一个属性
  • 调用者传递一个参数列表
  • 该属性实际上不接受参数列表
  • 该属性返回一个对象
  • 该对象具有默认属性
  • 该默认属性接受一个参数列表
然后使用参数列表调用默认属性。奇怪但真实

从表面上看,这似乎是一条奇怪的规则,但在处理收藏时,这是非常宝贵的。或者至少是这样,但我似乎无法让它发挥作用

class Test1
    public property get foo
        set foo = new Test2
    end property
end class

class Test2
    public default property get bar (arg)
        Response.Write arg
    end property
end class

dim t: set t = new Test1
Response.Write TypeName(t.foo) ' => "Test2"
t.foo.bar("Hello, World!") ' => "Hello, World!"
t.foo("Hello, World!") => "Microsoft VBScript runtime error '800a01c2' / Wrong number of arguments or invalid property assignment: 'foo'"
调用方调用
foo
属性并传递参数列表。
foo
属性实际上不接受参数列表。
foo
属性返回类型为
Test2
的对象
Test2
有一个默认属性,
bar
。该默认属性接受一个参数列表


这是一个错误,还是我误解了默认属性语义或我的代码?

您的问题在这一行:

t、 福(“你好,世界!”)

Test2类没有名为foo的方法。你的意思是:

t、 foo.bar=“你好,世界!”


您的代码也不完整。除非您打算将属性设置为只读,否则还应指定setter。

好吧。我本以为这会奏效。这可能是VBScript属性获取程序实现中的一个错误,这可能是我的错。很抱歉


由于上一次接触该代码的人是1998年的我,因此我不希望很快就能得到修复。

我不确定您在这里说的是什么。这是一个最小的测试用例,不是实用的代码。这些属性的存在只是为了演示我得到的行为,而这与setter没有任何关系。