0

我想知道何时在 Office VBA 中处理属性。

考虑这个类模块(MyClass):

Public Property Get ExpensiveProperty() As Variant
    'Some resource expensive procedure here
End Property

Public Property Get SomeProperty() As Variant
    'Something easy
End Property

这个模块:

Sub test()
    Dim MC As MyClass
    Set MC = New MyClass
    
    Dim Smth As Variant
    Smth = MC.SomeProperty
End Sub

是否MC.ExpensivePropertytest()程序处理?(假设没有参考ExpensivePropertyin SomeProperty

4

1 回答 1

1

放置一个简单的Debug.Print-Statement 表明ExpensiveProperty除非请求,否则不会调用它(我看不出为什么应该这样做)。

Public Property Get ExpensiveProperty() As Variant
    Debug.Print "Expensive..."
    ExpensiveProperty = "Expensive"
End Property

Public Property Get SomeProperty() As Variant
    Debug.Print "Easy..."
    SomeProperty = "Easy"
End Property

运行您的测试例程后,您会Easy...在即时窗口中找到输出,但不是Expensive.... 在两个 getter 中设置断点也表明没有调用昂贵的方法。

当然,如果您在MC-variable 上添加 watch 或在 -window 中查看它,情况就会改变Local。在您单击小 [+] 按钮的那一刻,调试器会尝试评估所有公共属性,并且当然必须调用所有 getter 方法(请注意,在这种情况下,调试器不会在任何断点处停止,Debug.Print但是执行。

于 2021-04-07T10:28:16.830 回答