我以前是这样写的:
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”位是否只执行一次,但在下一次调用中,它已经存在。
干杯,罗伯。
最佳答案
正如您所提到的,它只会执行一次,并且在下一次函数调用时,它将引用相同的对象。顺便说一下,您的第一个代码段不是线程安全的。如果两个线程同时调用您的函数,它们最终可能会运行构造函数两次,这不是您想要的。使用第二个代码段可以让您免于手动锁定并确保线程安全,因为编译器会为您生成适当的代码。
请注意,如果您已将其声明为
Static x As List(Of String)
x = New List(Of String)
每次都会重新创建它。
关于vb.net - VB.NET 中的静态成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1483760/