我在VBScript閱讀埃裏克利珀對默認屬性語義的文章:http://blogs.msdn.com/b/ericlippert/archive/2005/08/30/458051.aspx麻煩VBScript的默認屬性
它說:
爲IDispatch接口::調用的執行者的規則是如果滿足以下所有的都是真:
- 調用者可以調用屬性
- 調用者傳遞的參數列表
- 酒店不採取實際的參數列表
- 該屬性返回一個對象
- 該對象是否具有默認屬性
- 該默認屬性採用參數列表
然後調用默認屬性參數列表。奇怪而真實。
這似乎是一個奇怪的規則,但它是非常寶貴的,當你使用集合。或者至少,這將是,但我似乎無法讓它工作。
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
。該默認屬性需要一個參數列表。
這是一個錯誤,或者我誤解或者默認屬性語義或我的代碼?
我不確定你在說什麼。這是一個最小的測試用例,不是實用的代碼。這些屬性的存在只是爲了證明我所得到的行爲,這與setters沒有任何關係。 – 2011-04-20 05:31:14