这真让我困扰,阻碍了我的开发/调试。每当我声明我实现的接口的变量类型时,本地窗口都不会显示它的属性值。相反,它只是读取
对象不支持此属性或方法
这很愚蠢,因为它绝对可以。事实上, 已经 ,以履行与接口的合约。
如果我将变量声明为接口的具体实现,则窗口按预期工作。但是,这完全违背了编码到抽象的目的。
如何让本地人窗口正确显示班级'财产价值?
最小,完整且可验证的示例:
创建一个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
答案 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
我怀疑它与此有关,观察窗需要这个......也许......