Я прочитал статью Эрика Липперта о семантике свойств по умолчанию в VBScript: http://blogs.msdn.com/b/ericlippert/archive/2005/08/30/458051.aspx
Там написано:
Правило для разработчиков 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
. Это свойство по умолчанию принимает список аргументов.
Это ошибка, или я неправильно понимаю семантику свойств по умолчанию или мой код?