4

我曾经这样写:

Private Sub Example()
Static CachedPeople As List(Of MyApp.Person)
If CachedPeople Is Nothing Then
    CachedPeople = New List(Of MyApp.Person)
End If
...rest of code...
End Sub

但后来想知道我是否可以将其减少为:

Private Sub Example()
Static CachedPeople As New List(Of MyApp.Person)
...rest of code...
End Sub

问题是,“New”位是否只在函数第一次执行时执行一次,但在下一次调用时,它已经存在。

干杯,罗布。

4

1 回答 1

9

它只会执行一次,并且在下一次函数调用时,它会引用同一个对象,正如你所提到的。顺便说一句,您的第一个片段不是线程安全的。如果两个线程同时调用你的函数,它们最终可能会运行构造函数两次,这不是你想要的。使用第二个代码段可以让您从手动锁定和确保线程安全中解脱出来,因​​为编译器会为您生成适当的代码。

请注意,如果您已将其声明为

Static x As List(Of String)
x = New List(Of String)

每次都会重新创建它。

于 2009-09-27T15:13:20.087 回答