Подтвердить что ты не робот

В VB6 какова разница между Property Set и Property Let?

Я только что создал несколько методов Property Set, и они не компилировались. Когда я изменил их на Property Let, все было в порядке.

С тех пор я изучил документацию, чтобы найти разницу между Property Set и Property Let, но должен признать, что она не является более мудрой. Есть ли разница, и может ли кто-нибудь предложить указатель на правильное объяснение этого?

4b9b3361

Ответ 1

Property Set для объектов (например, экземпляров класса)

Property Let относится к "нормальным" типам данных (например, строка, логическая, длинная и т.д.)

Ответ 2

Property Let более универсален, чем Property Set. Последний ограничивается только ссылкой на объекты. Если у вас есть это свойство в классе

Private m_oPicture          As StdPicture

Property Get Picture() As StdPicture
    Set Picture = m_oPicture
End Property

Property Set Picture(oValue As StdPicture)
    Set m_oPicture = oValue
End Property

Property Let Picture(oValue As StdPicture)
    Set m_oPicture = oValue
End Property

Вы можете вызвать Property Set Picture с помощью

Set oObj.Picture = Me.Picture

Вы можете вызвать Property Let Picture с помощью

Let oObj.Picture = Me.Picture
oObj.Picture = Me.Picture

Реализация Property Set - это то, что другие разработчики ожидают для свойств, которые являются объектными ссылками, но иногда даже Microsoft предоставляет только Property Let для ссылочных свойств, что приводит к необычному синтаксису oObj.Object = MyObject без оператора Set. В этом случае использование оператора Set приводит к ошибке компиляции или времени выполнения, поскольку в классе oObj нет Property Set Object.

Я стараюсь реализовать как Property Set, так и Property Let для свойств стандартных типов - шрифтов, изображений и т.д., но с другой семантикой. Обычно на Property Let я имею тенденцию выполнять "глубокую копию", т.е. Клонирование StdFont вместо просто ссылки на исходный объект.

Ответ 3

Property Set предназначен для объектноподобных переменных (ByRef), тогда как Property Let для значений-подобных переменных (ByVal)