【发布时间】:2015-05-22 15:57:27
【问题描述】:
这真的很困扰我并阻碍了我的开发/调试。每当我声明我正在实现的接口的变量类型时,Locals 窗口都不会显示它的属性值。相反,它只是读取
对象不支持该属性或方法
这很愚蠢,因为它确实如此。事实上,它必须履行与接口的合同。
如果我将变量声明为接口的具体实现,则窗口将按预期工作。然而,这完全违背了从一开始就对抽象进行编码的目的。
如何让本地窗口正确显示类的属性值?
最小、完整且可验证的示例:
创建一个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
【问题讨论】:
-
可能最简单的解决方案是对整个 VBA IDE 进行逆向工程,找到 Microsoft 错误,调整一些汇编级代码,然后......宾果游戏,一个工作的 Locals 窗口。
-
事实上,我发现了一个真正了不起的实现,这个评论太窄了,无法包含。
-
@mwolfe02 用于 Fermat 参考的道具:D
-
非常有趣的问题...嗯,这似乎是错误。我建议使用在 VB.NET (Visual Studio) 中实现接口的类创建自定义 *.dll。你可以简单地在其他机器上使用它,但是你需要在 GAC 中注册这个 dll。这是我最喜欢在 VBA 中使用自定义类的方式。