我刚刚创建了几个Property Set
方法,但是它们没有编译。当我改为Property Let
时,一切都很好。
后来我查看了文档,想要找到Property Set
和Property Let
之间的区别,但承认自己并不清楚。这两者有什么区别吗?如果有,能否请有经验的人士给予适当的解释和指导?
我刚刚创建了几个Property Set
方法,但是它们没有编译。当我改为Property Let
时,一切都很好。
后来我查看了文档,想要找到Property Set
和Property Let
之间的区别,但承认自己并不清楚。这两者有什么区别吗?如果有,能否请有经验的人士给予适当的解释和指导?
属性设置(Property Set)
用于对象(例如类实例)
属性设值(Property Let)
用于“普通”数据类型(例如字符串、布尔值、长整型等)
Property Get
用于将对象引用返回为属性,而不是 Property Set
。 - mwolfe02Function
和 Property Get
过程类似,Property Set
过程是一个单独的过程,可以接受参数,执行一系列语句并更改其参数的值。然而,不同于既返回一个值的 Function
和 Property Get
过程,你只能在对象引用赋值(Set
语句)的左侧使用 Property Set
过程。 - mwolfe02Property Set
定义了一个可以在 Set
语句的左侧使用的属性。不过,我认为提到 WithEvents
有点令人困惑,它与解释差异并没有真正关联。Property Set
对于对象之间的一对一关系非常有用,这些对象可以在运行时动态地进行更改,即超出了 WithEvents
的范围。 - MarkJProperty 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,导致出现了没有使用 Set 语句的非正常语法 "oObj.Object = MyObject"。在这种情况下,使用 Set 语句会导致编译时或运行时错误,因为 oObj 类上没有实现 Property Set Object。Property Set
和Property Let
,并且假设实现代码相同(就像您的示例一样),当开发人员调用任一属性时,VB6是否有任何内置差异?例如,如果开发人员调用Let
属性,VB6是否会隐式地决定突然按值而不是按引用传递对象,或者是否有其他类似的小细节?(我知道您说您喜欢编写具有单独语义的内容,但我不确定语言本身是否会有任何不同。) - PanzercrisisByVal oValue As StdPicture
与ByRef oValue As StdPicture
会改变对象引用传递的方式。这就像C/C++中的StdPicture *oValue
与StdPicture **oValue
——始终是指针,但在第二种情况下,可以在过程内更改引用(例如将引用分配给新对象),并且调用者可以接收此新引用。因此,并没有“复制”选项,我通常在Property Let
内部使用Clone
方法(例如在IFont
接口上)手动实现“深度复制”语义。 - wqwProperty Set
用于对象类型的变量(ByRef),而 Property Let
用于值类型的变量(ByVal)。
Property Get
,就像返回任何其他类属性一样(没有专门用于返回类属性的对象特定版本)。 - mwolfe02