我刚刚创建了几个Property Set
方法,但它们没有编译。当我将它们改为Property Let
时,一切都很好。
我已经研究过文档以找出Property Set
和Property Let
之间的区别,但必须承认不是更聪明。是否有任何区别,如果是这样,有人可以提供指向它的正确解释吗?
答案 0 :(得分:29)
Property Set
用于对象(例如,类实例)
Property Let
用于“普通”数据类型(例如,字符串,布尔值,长整数等)
答案 1 :(得分:24)
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
而不是仅仅保留对原始对象的引用。
答案 2 :(得分:4)
Property Set
用于类似对象的变量(ByRef),而Property Let
用于类似值的变量(ByVal)