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
вместо того, чтобы просто удерживать ссылку на исходный объект.