【发布时间】:2014-03-31 12:02:03
【问题描述】:
VBA 初学者(以及一般的编程初学者)希望了解更多有关如何有效地完成 OOP 的信息。
有人可以解释或提供参考来讨论使用的好处/目的 - 类模块的内部 - VBA 中的 Private Property Get 和/或 Let/Set 语句与直接访问属性,尽管不需要操作数据?
例子:
我创建了一个cDimension 类(在 Excel 中)。此类将线条绘制为Shape 对象,以及其他一些不相关的东西。 DrawingScale 变量允许根据需要缩放整个图形。某些属性在获取/设置时需要操作,而其他属性则不需要。
因此,例如,pWidth 需要进行缩放:
'clsDimension
Private pWidth As Single
Private Property Get Width() As Single
Width = pWidth
End Property
Private Property Let Width(w As Single)
pWidth = w / DrawingScale
End Property
但pColor 不需要任何操作,进出:
Private pColor As Integer
Private Property Get Color() As Integer
Color = pColor
End Property
Private Property Let Color(c As Integer)
pColor = c
End Property
pWidth 属性是一个实例,在该实例中,对类本身的过程使用私有属性 Get 和 Let 方法对我来说很有意义。但是,我的问题是:是否有任何理由也使用私有属性方法来获取和设置 pColor 属性,就像我在上面给出的那样?
Public Function Line(sht As Worksheet, L As tLine, Optional c = vbBlack) As Shape
Width = DistanceBetweenTwoPoints(L.first.x, L.first.y, _
L.second.x, L.second.y) '<-- pWidth is scaled
Color = c '<-- Vs. just using pColor = c
Set Line = sht.Shapes.AddLine(L.first.x, L.first.y, L.second.x, L.second.y)
End Function
提前致谢。
【问题讨论】:
-
代码维护和进化意味着“不需要任何操作”并不总是以“永远不需要...”而告终,因此“总是”使用属性 Let 被认为是一种好习惯/Get,甚至在类中,而不是直接使用私有支持字段。
-
简单的答案,但我想这是有道理的。谢谢!
-
我曾与一个将所有类模块变量声明为公共而不是私有的人一起工作,这样它们就可以在没有 get 和 let 的情况下使用,这对我来说总是很奇怪。我通常认为类模块执行某些操作,而不仅仅是用作数据类型,因此我通常使用 get 和 let 并对任何传入的内容执行一些数据验证,以限制和控制我的类中显示的内容。如果您问我,这是优势之一,但我不确定您会如何在现有的编码范例中描述这一点。
-
您的语法实际上并不完全正确,您可能需要对其进行编辑以包含 Property 关键字。编写的代码不会编译。
-
谢谢。相应地进行了编辑。
标签: class vba oop properties private