2009-09-27 2 views
4

Я писал это:Статические члены в VB.NET

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 

Вопрос в том, будет ли «Новый» бит только выполняться один раз, когда функция сначала выполняется, но в следующем вызове она уже будет существовать.

Cheers, Rob.

ответ

9

Он будет выполнен только один раз и после следующего вызова функции, он будет ссылаться на тот же объект, как вы упомянули. Кстати, ваш первый фрагмент не является потокобезопасным. Если два потока одновременно вызовут вашу функцию, они могут в конечном итоге запустить конструктор дважды, чего вы не хотите. Использование второго фрагмента избавляет вас от ручного блокирования и обеспечения безопасности потоков, поскольку компилятор создает для вас соответствующий код.

Обратите внимание, что если бы вы объявили его в качестве

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

Было бы воссозданы каждый раз.

+0

Код исходит из веб-приложения ASP.NET в коде обработки страниц. Я думаю, с точки зрения моего кода, это один поток на страницу, но все должно быть в порядке ... –

Смежные вопросы