Проблема со свойствами VBScript по умолчанию
Я прочитал статью Эрика Липперта о семантике свойств по умолчанию в 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
собственность и передает список аргументов. The foo
свойство фактически не принимает список аргументов. The foo
свойство возвращает объект типа Test2
. Test2
есть свойство по умолчанию, bar
. Это свойство по умолчанию принимает список аргументов.
это ошибка, или я неправильно понял семантику свойств по умолчанию или мой код?
2 ответов
ваша проблема в этой строке:
t.фу ("Привет, Мир!")
ваш класс Test2 не имеет метода с именем foo. То, что вы хотите сделать, это:
Т.фу.бар = "Привет, Мир!"
ваш код также неполон. Если вы не хотите, чтобы ваши свойства были доступны только для чтения, вы также должны назначить сеттеры.