2017-08-08 74 views
3

Allthough是一位经验丰富的VBA程序员,这是我第一次创建自己的类(对象)。我很惊讶地发现所有的房产都在当地人窗口中“重复”。小例子(在“结束子”破裂时):为什么这两个名称和PNAME在本地窗口显示VBA类/对象

' 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 

?我能以某种方式摆脱pName吗?

最好的问候, 黑尔格

+2

它只是试图通过向您显示调试时的价值来提供帮助。 pName是私有的,并且不会通过objTest暴露给调用者。 –

回答

9

评论&答案已经说过,这只是VBE有帮助。

但是,如果你觉得它吵有私人领域,并在当地人上市工具窗口公共成员,还有一种方法可以很好地清理 - 在这里我把Test过程内部ThisWorkbook,并留下一个名为Class1类:

clean locals toolwindow

所以这是怎么回事呢?什么是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 

类只有1个私人领域,名为this用户定义的类型值,用于保持所有的封装的数据成员。

其结果是,这些属性的基础字段被有效隐藏,或者更确切地说,他们都this下重新组合,所以你不会看到基础字段值,除非你想看到他们:

locals toolwindow, 'this' field expanded

作为一个额外的好处,你不再需要任何伪匈牙利语前缀,属性的实现是清晰的,所有属性中最好的名称都与它们的后台字段具有完全相同的标识符名称。

+1

喜欢这个想法,有时间重写我所有的课程来实现它。 –

+0

@这是一个副作用,你会发现它也会将对象状态序列化为一个二进制文件,在公园散步=) –

6

所有检查窗不仅显示了对象,你的公共接口,而且他们的私有成员。 AFAIK没有什么可以做的。

认为这是一个很好的功能,可以在调试时获得更多的见解。

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