Ответ 1
Это вещь COM, которая всплывает в VB. Set назначает ссылку для замены свойства, указанного в элементе, тогда как Let, как ожидается, скопирует содержимое операнда в существующее свойство. (См. Также Property Get).
IIRC это не основной COM-объект, больше того, что используется там, где язык не обладает достаточной выразительной способностью справляться со значениями, связанными с ссылочными проблемами, в достаточно высокой степени - я считаю, что он может применяться только при использовании IDispatch ( где вы обращаетесь по идентификатору свойства, а не по методу), а не к настраиваемому интерфейсу (где вам всегда нужно решать метод и вызывать это). Я уверен, что VB.NET(или другие языки .NET) не накладывает такие вещи, и поэтому они редко встречаются.
Essential COM by Box не упоминает об этом (только propget и propput для get и set). COM IDL и дизайн интерфейса д-ром Аль-Майором упоминают его на P106 и говорят:
dispinterface DMyInterface { methods: ... [id(3), propputref] void lMyProp([in] IDispatch *pDisp); }
Атрибут
propputref
- это странная вещь, которая берет свое начало в синтаксисе синтаксиса Visual Basic. Рассмотрим следующее:Dim val as DMyOtherInterface Dim var as DMyInterface Set var.lMyProp = val var.lMyProp = val
Два назначения являются допустимыми, но означают совершенно разные вещи. Использование ключевого слова
Set
в первом абзаце указывает, что lMyProp получает интерфейс [...]. Второе назначение - это simpe one, где значение объектаval
, которое является значением элемента по умолчанию интерфейсаDMyOtherInterface
(элемент по умолчанию является членом, помеченным идентификаторомDISPID_VALUE
, как это будет объясняется вкратце), присваивается свойствуlMyProp
интерфейсаDMyInterface
.Первое назначение выполняется с использованием метода propputref, связанного с свойством lMyProp, тогда как второе присваивание использует способ пропущения. Чтобы это работало, необходимо определить методы propputref и propput. Если вы смущены таким образом делать что-то, вы не одиноки. В то время как у VB есть много хороших функций, которые коренным образом изменили характер программирования, определение языка носило преимущественно рыночный характер, а не разрабатывалось, а иногда оно показывает.
Поразительно, что я никогда не пользовался Большой книгой, так как читал ее в начале 2000 года до того, как COM и .COM бюст (ее хорошая книга для своей цели, хотя). Спасибо за поездку вниз по переулку памяти - мне нравится, как люди говорят нам, что программирование становится все труднее!
У меня нет книги Lidin, чтобы узнать, упоминает ли она .other
, но я уверен, что вы это делаете (BTW благодарит много за Mono.Cecil)