Pourquoi n'est-il pas possible de définir un Public Var?
Je suis en train de mettre le public suivantes var:
var collection = new Dictionary<string, Statistics>();
Je veux être en mesure d'utiliser la même collection tout au long de mon application et je veux donc créer dès le haut lorsque les applications commence.
Comment puis-je faire?
- Désolé je n'ai pas été assez clair. Je souhaite à tous de mon Form1.cs pour y accéder, pas différent .fichiers cs 🙂
var
ne peut être utilisé pour les variables locales. Utilisez simplement le nom du type deDictionary<string, Statistics>
à sa place.- Je vous suggère de modifier votre question, alors, que "tout au long de ma demande" a une connotation différente.
- J'ai vu votre commentaire explicatif plus tôt, je n'aurais pas fait des efforts pour fournir de précieux réponse à tout et question entièrement différente. Merci de corriger votre question, et la prochaine fois, l'utilisation libellé plus précis.
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de concept de variable globale en C#. Vous toujours de déclarer des variables à l'intérieur d'une classe/domaine d'application.
Ce que vous peut faire, est de le rendre accessible via
public
modificateur, comme une propriété (dire).Juste une idée:
Après vous pouvez y accéder comme:
Vous avez à entraînement par vous-même, ce qui convient à vos besoins exacts.
Vous pouvez créer un public static champ ou une propriété dans la classe publique (en option également statique):
Accéder ensuite dans le code:
Noter qu'il n'est pas thread-safe approche. Donc, si vous avez l'intention d'utiliser de dictionnaire statique dans le multithreading application, il est préférable de disposer de méthodes statiques, wraping le dictionnaire thread-safe (selon Jon Skeet mentionné) ou l'utilisation de thread-safe collections, pour exapmle ConcurrentDictionary.
Dictionary<,>
n'est tout simplement pas. Il serait préférable d'avoir des méthodes statiques pour les opérations requises, enveloppant le dictionnaire dans un thread-safe façon. Il serait mieux encore, pour éviter la statique, en premier lieu, bien sûr...L'erreur que vous obtenez est:
Je crois que vous essayez de définir votre collection comme:
Vous ne pouvez pas utiliser
var
mot-clé à ce niveau,Vous pouvez le définir comme:
Il sera disponible pour toutes les méthodes à l'intérieur de la classe Form1
MODIFIER
Les commentaires de l'OP ont montré, que la condition n'est imposée que pour être en mesure d'accéder à la variable par le biais de l'un .cs code. Veuillez ne pas tenir compte de la suivante, s'il vous plaît voter supprimer si vous pensez que cette réponse n'est pas un ajout précieux à la question pour les futurs visiteurs de cette rubrique. Ou de voter, si vous pensez qu'il a suffisamment de valeur ajoutée pour rester.
Ce que je voulais dire pour la question d'origine, concernant
I want to be able to use the same collection all through my application
Dans un environnement orienté objet, si c'est une exigence qui ne peut pas être dépassé par refactoring/la restructuration de l'application, vous devriez certainement utiliser le Modèle de conception Singleton
D'un singleton est un modèle qui assure qu'une seule instance de la classe donnée existe (par application contex/machine virtuelle, bien sûr), et que l'instance peut être consulté à partir de partout dans le contexte de la même application.
Qui est:
Exemple: (à partir de C#Approfondie du lien, deuxième version, avoir simple fil de sécurité, prendre en note le nom de l'auteur de l'article!)
MÉFIEZ-vous toujours prendre la sécurité des threads en compte!
Que j'ai eu une réponse de @JonSkeet (aïe!), Je pense que je dois expliquer les raisons de ma réponse:
Pour:
Contre:
Également recommandé de lecture:
Singleton Orchestrations
dans BizTalk).