【发布时间】:2014-10-31 14:55:07
【问题描述】:
我有这个简化的类模块 clXXX....
':: backing field
Private fTemplateBk As Excel.Workbook
':::::::::::::::::::::::::::
'::
':: constructor
Private Sub Class_Initialize()
End Sub
':::::::::::::::::::::::::::
'::
':: properties
Property Get TemplateBk() 'As Excel.Workbook '<< different error messages depending on if "As Excel.Workbook" is included or not
TemplateBk = fTemplateBk
End Property
':::::::::::::::::::::::::::
'::
':: methods
Public Sub openTemplate()
Set fTemplateBk = Excel.Workbooks.Open("\\xxx\yyy\zzz.xlsx")
End Sub
Public Sub someMethod()
Me.TemplateBk.Sheets(1).Activate
End Sub
普通模块:
Sub control()
Dim x As clXXX
Set x = New clXXX
x.openTemplate
x.someMethod '<<<<<<errors here
End Sub
我只想通过只读属性TemplateBk 使用me.TemplateBk. ... 之类的代码访问私有字段fTemplateBk。我该如何修改上述内容才能做到这一点?
【问题讨论】:
-
在您的属性中缺少
Set获取.... -
另外,为什么要在类中使用属性?您已经有权访问成员字段。
-
@citizenkong - 使用属性与支持字段是一个很好的做法。例如见stackoverflow.com/questions/271318/…
-
@citizenkong 我相信在类的构造函数中,直接访问私有支持字段是公平的,但其他任何地方的好做法是使用 setter 和 getter。
-
@TimWilliams and whytheq:谢谢,我不知道。