Это вещь COM, которая появляется в VB. Set назначает ссылку для замены элемента, на который ссылается свойство, тогда как Let , как ожидается, скопирует содержимое операнда в существующее свойство. (См. Также Property Get ).
IIRC, это не основная вещь COM, а то, что используется там, где язык не обладает достаточной выразительной силой, чтобы достаточно точно справляться с проблемами значения и ссылок - я считаю, что это может применяться только при использовании IDispatch ( где вы обращаетесь по идентификатору свойства, а не по методу), а не по пользовательскому интерфейсу (где вы всегда должны разрешать метод и вызывать его). Я почти уверен, что VB.NET (или другие языки .NET) не обнаруживают таких вещей, и, следовательно, они редки.
Essential COM by Box не упоминает об этом (только пропет и проппут для получения и установки). COM IDL и дизайн интерфейса Dr Al Major упоминает об этом на 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 назначается интерфейс [...]. Второе назначение - простое, где значение объекта val
, которое является значением элемента по умолчанию интерфейса DMyOtherInterface
(элементом по умолчанию является член, помеченный DISPID_VALUE
Идентификатор, как будет объяснено ниже), присваивается свойству lMyProp
интерфейса DMyInterface
.
Первое назначение выполняется с использованием метода propputref, связанного со свойством lMyProp, в то время как второе назначение использует метод propput. Чтобы это работало, должны быть определены оба метода propputref и propput. Если вас смущает такой способ ведения дел, вы не одиноки. В то время как у VB есть много хороших функций, которые в корне изменили природу программирования, определение языка было преимущественно ориентировано на рынок, а не разрабатывалось, и иногда оно показывает .
Забавно, но я никогда не пользовался книгой Major с тех пор, как прочитал ее в начале 2000 года, до COM и .COM (хотя это хорошая книга для своих целей). Спасибо за поездку вниз по переулку памяти - мне нравится, как люди говорят нам, что программирование становится все сложнее!
Не берите с собой книгу Лидина, чтобы узнать, упоминается ли в ней .other
, но я уверен, что вы делаете (кстати, большое спасибо за Mono.Cecil)