如何在Locals窗口中获取实现接口的类的属性值?

时间:2015-03-19 13:44:08

标签: vba oop interface ide

这真让我困扰,阻碍了我的开发/调试。每当我声明我实现的接口的变量类型时,本地窗口都不会显示它的属性值。相反,它只是读取

  

对象不支持此属性或方法

这很愚蠢,因为它绝对可以。事实上, 已经 ,以履行与接口的合约。

如果我将变量声明为接口的具体实现,则窗口按预期工作。但是,这完全违背了编码到抽象的目的。

如何让本地人窗口正确显示班级'财产价值?

最小,完整且可验证的示例:

创建一个IClass类以用作接口。

Option Explicit

Public Property Get Name() As String
End Property

创建一个实现接口的Class1

Option Explicit

Implements IClass

Public Property Get Name() As String
    Name = "Class1"
End Property

Private Property Get IClass_Name() As String
    IClass_Name = Name
End Property

最后,常规.bas模块中的一些测试代码来说明问题。

Option Explicit

Public Sub test()
    Dim x As Class1
    Dim y As IClass

    Set x = New Class1
    Debug.Print x.Name

    Set y = New Class1
    Debug.Print y.Name

    Stop
End Sub

enter image description here

1 个答案:

答案 0 :(得分:-1)

我可能错了,但我认为这可能与在VBA中实例化类的方式有关。

例如:

Dim oClass1 as Class1
Set oClass1 = new Class1

不同
Dim oClass1 as New Class1

在第二种情况下,我相信在访问属性之前不会调用构造函数。

如果您尝试此操作,则会在Watch窗口中看到该属性。注意IClass的新功能 - 仅用于演示 - 我知道不是这样做的方法:)

Public Sub test1()

    Dim x As Class1
    Dim y As IClass

    Set y = New IClass
    Set x = New Class1
    Debug.Print x.Name
    Debug.Print y.Name
    Stop

End Sub

我怀疑它与此有关,观察窗需要这个......也许......