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
приводит к ошибке времени компиляции или выполнения, потому что Property Set Object
не реализовано в классе oObj
.
Я стараюсь реализовать как Property Set
, так и Property Let
для свойств стандартных типов - шрифтов, изображений и т. Д. - но с другой семантикой. Обычно на Property Let
я обычно выполняю «глубокое копирование», то есть клонирую StdFont
вместо того, чтобы просто удерживать ссылку на исходный объект.
person
wqw
schedule
19.02.2011