VBA类/对象

Hel*_*lge 4 vba class

尽管是一位经验丰富的VBA程序员,但这是我第一次创建自己的类(对象).我很惊讶地看到所有属性都在"本地窗口"中"重复".小例子(在'End Sub'处休息):

' Class module:
Private pName As String

Public Property Let Name(inValue As String)
    pName = inValue
End Property
Public Property Get Name() As String
    Name = pName
End Property

' Normal module:
Sub Test()
    Dim objTest As cTest
    Set objTest = New cTest
    objTest.Name = "John Doe"
End Sub
Run Code Online (Sandbox Code Playgroud)

为什么Name和pName都显示在Locals窗口中?我能以某种方式摆脱pName吗?

最好的问候,Helge

Mat*_*don 12

正如评论和答案所说,这只是VBE的帮助.

但是,如果您发现在本地工具窗口中列出私有字段和公共成员很吵,有一种方法可以很好地清理它 - 这里我把Test程序放在里面ThisWorkbook,并留下名为的类Class1:

干净的本地工具窗口

那么这里发生了什么?什么this

这是Class1:

Option Explicit

Private Type TClass1
    Name As String
    '...other members...
End Type

Private this As TClass1

Public Property Get Name() As String
    Name = this.Name
End Property

Public Property Let Name(ByVal value As String)
    this.Name = value
End Property
Run Code Online (Sandbox Code Playgroud)

该类只有1个私有字段,一个名为的用户定义类型值this,它包含所有封装的数据成员.

因此,属性的基础字段被有效隐藏,或者更确切地说,它们都被重新分组this,因此除非您想要查看它们,否则您将看不到基础字段值:

本地工具窗口,'this'字段扩展

作为额外的好处,您不再需要任何伪匈牙利语前缀,属性的实现非常清晰,并且最好的所有属性都具有与其后备字段完全相同的标识符名称.

  • 喜欢这个主意,是时候重写我所有的类来实现它了。 (2认同)

pau*_*oho 6

所有检查窗口不仅显示对象的公共接口,还显示其私有成员.AFAIK你无能为力.

考虑这是一个很好的功能,可以在调试时获得更多的见解.

根据我的经验,这在现实世界对象中不是一个问题,因为它们往往具有更多的字段和属性.假设一致的命名(如您的示例所示),字段和属性很好地组合在一起.