2011-02-09 3 views
1

Considérons ce code de la page-behind:Toutes les instances de la même page ASPX partagent-elles le même champ statique?

public partial class Products : Page 
{ 
    private static SomeClass SharedField; 

    public Product() 
    { 
     // ... Some logic 
    } 
} 

Est-ce que toutes les instances Products pages partagent le même SharedField, je sais que c'est un concept de base de champs statiques. Mais dans ce cas, vraiment? tous les utilisateurs peuvent avoir accès (et ne peuvent pas avoir leur propre instance de) au même champ statique sur le site Web?

Si oui, dans quels aspects cela serait-il utilisé par le développeur Web? ou est-ce une pratique non recommandée?

Répondre

2

Oui, il y aura une instance unique de ce champ statique pour tous les utilisateurs, mais uniquement dans un processus de travail unique. Si vous avez des fermes Web/jardins Web, ils auront chacun leur propre instance statique. Si le processus de travail redémarre, vous obtenez une nouvelle instance statique.

Vous devrez utiliser le verrouillage autour de ce champ partagé pour assurer la sécurité des threads.

Quant à savoir pourquoi utiliser cela, je ne suis pas sûr, je ne le fais jamais. Le meilleur exemple que je peux vous donner est le HttpContext.Current statique, qui vous donne accès à la demande, la réponse, etc.

+0

', mais seulement dans un seul processus de travail ...' +1 –

2

SharedField sera disponible dans une instance pour l'ensemble du cycle de vie du site Web.

Pour en savoir un peu plus à ce sujet, see this answer.

0

Une meilleure pratique serait de stocker votre objet dans l'état de l'application.

Application["MyObject"] = new SomeClass();

+0

Croyez-le ou non, Microsoft dit d'utiliser plutôt statique. http://stackoverflow.com/questions/4879023/what-is-the-life-span-of-a-field-in-a-static-class/4879119#4879119 – Greg

+0

Wow, ça m'a vraiment surpris! Je suppose que l'objet Application a été remplacé par l'objet Cache de toute façon. – GavinH

Questions connexes