Pourquoi C # n'a-t-il pas de variables statiques locales comme C? Cela me manque!!
Réponses
Trop de publicités?Parce qu'ils ont foiré, et à gauche une fonction utile pour l'adapter à eux-mêmes.
Tous les arguments au sujet de la façon dont vous devriez code, et ce qui est intelligent, et vous devriez reconsidérer votre mode de vie, sont pompeux défensive des excuses.
Bien sûr, C# est pur, et whatchamacallit axée sur les résultats. C'est pourquoi ils s'auto-créer des locaux pour les lambda fonctions. C'est tellement compliqué. Je me sens tellement stupide.
Boucle portée statique est utile et important dans de nombreux cas.
Bref, la vraie réponse, c'est que vous devez déplacer les locaux de la statique dans la classe de la portée et de vivre avec la classe de l'espace de noms de la pollution en C#. Prendre votre plainte à l'hôtel de ville.
Voici un MSDN entrée de blog qui traite de la question exacte posée dans le post original:
http://blogs.msdn.com/b/csharpfaq/archive/2004/05/11/why-doesn-t-c-support-static-method-variables.aspx
Il y a deux raisons C# n'a pas cette fonctionnalité.
Tout d'abord, il est possible d'obtenir près le même effet en avoir un au niveau de la classe statique, et l'ajout de la méthode statique nécessiterait un accroissement des la complexité.
Deuxièmement, au niveau de la méthode statique sont peu connues pour provoquer des des problèmes lorsque le code est appelé à plusieurs reprises ou à partir de plusieurs threads, et étant donné que les définitions sont dans les méthodes, il est plus difficile de trouver l' les définitions.
[Auteur: Eric Gunnerson]
L'état fait généralement partie d'un objet ou d'une partie d'un type , pas d'une partie d'une méthode. (L'exception étant des variables capturées, bien sûr.)
Si vous voulez l'équivalent d'une variable statique locale, créez une variable d'instance ou une variable statique - et demandez-vous si la méthode elle-même doit réellement faire partie d'un type différent avec cet état.
Je suis loin d'être aussi familier avec le C, comme je suis en C#, mais je crois que vous pouvez accomplir tout ce que vous pouvez avec un local statique, en utilisant un niveau de classe statique qui est utilisé uniquement pour une méthode. Évidemment, cela vient avec quelques changement syntaxique, mais je crois que vous pouvez obtenir ce que la fonctionnalité dont vous avez besoin.
En outre, Eric Lippert réponses à ce genre de questions sur son blog beaucoup. Généralement répondu de cette façon: "je me suis demandé "pourquoi ne pas en C# en œuvre fonction de X?" tout le temps. La réponse est toujours la même: parce que personne n'a jamais conçu, a précisé, mise en œuvre, testé, documenté et expédiés de la fonctionnalité." Essentiellement ses réponses généralement bouillir, il coûte de l'argent pour ajouter des fonctionnalités, et par conséquent, beaucoup de potentiel fonctionnalités ne sont pas mis en œuvre parce qu'ils n'ont pas de sortir sur le côté positif de l'analyse coûts-avantages.
Le C# est un composant-langage orienté et n'a pas la notion de variables en dehors de la portée d'une classe ou d'une méthode local. Variables au sein d'une méthode ne peut pas être déclarée statique, comme vous l'avez peut être l'habitude de le faire en C. Cependant, vous pouvez toujours utiliser une variable statique comme un substitut.
En général, il ya généralement des façons de résoudre les problèmes de programmation en C# sans recourir à l'aide de la méthode au niveau de la statique. L'état est généralement quelque chose que vous devriez conception dans les classes et les types, et pas des méthodes.