2017-08-08 72 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沒有什麼可以做的。

認爲這是一個很好的功能,可以在調試時獲得更多的見解。

根據我的經驗,這是真實世界中的一個問題,因爲它們往往有更多的字段和屬性。假設一致的命名(如您的示例所示),字段和屬性很好地組合在一起。