在VB6中,Property Set和Property Let之间有什么区别?

时间:2011-02-18 14:21:10

标签: oop properties vb6 setter letter

我刚刚创建了几个Property Set方法,但它们没有编译。当我将它们改为Property Let时,一切都很好。

我已经研究过文档以找出Property SetProperty Let之间的区别,但必须承认不是更聪明。是否有任何区别,如果是这样,有人可以提供指向它的正确解释吗?

3 个答案:

答案 0 :(得分:29)

Property Set用于对象(例如,类实例)

Property Let用于“普通”数据类型(例如,字符串,布尔值,长整数等)

答案 1 :(得分:24)

Property LetProperty 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 SetProperty Let,但具有不同的语义。通常在Property Let上,我倾向于执行“深层复制”,即克隆StdFont而不是仅仅保留对原始对象的引用。

答案 2 :(得分:4)

Property Set用于类似对象的变量(ByRef),而Property Let用于类似值的变量(ByVal)