2009-09-27 8 views
4

Je l'habitude d'écrire ceci:membres statiques dans 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 

Mais demandais si je pouvais réduire à:

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

La question est, sera le bit « Nouveau » seulement être exécuté une fois lors de la première exécution de la fonction mais dans l'appel suivant, il existera déjà.

Cheers, Rob.

Répondre

9

Il ne sera exécuté qu'une seule fois et lors de l'appel de la fonction suivante, il référencera le même objet, comme vous l'avez mentionné. D'ailleurs, votre premier extrait n'est pas sûr pour les threads. Si deux threads appellent votre fonction en même temps, ils peuvent finir par exécuter le constructeur deux fois, ce qui n'est pas ce que vous voulez. L'utilisation du second extrait vous évite de verrouiller manuellement et d'assurer la sécurité des threads, car le compilateur génère le code approprié pour vous.

Notez que si vous aviez déclaré comme

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

Il aurait été recréée à chaque fois.

+0

Le code provient d'une application Web ASP.NET dans le code de gestion de la page. Je pense, en termes de mon code, c'est un seul fil par page, mais ça devrait aller ... –

Questions connexes