11
votes

Est-ce qu'il existe un mot-clé en C # qui ferait persister les variables locales à travers plusieurs appels?

C'est-à-dire que, dans C, nous pouvons définir une fonction comme: xxx

et il retournera un nombre plus élevé chaque fois qu'il est appelé. Y a-t-il un mot-clé équivalent en C #?


1 commentaires

C a été inventé lorsque les threads n'existaient pas encore. Visual Basic a donc dû l'implémenter dans VB.NET. La quantité de code qu'il doit générer pour le faire le fil et la sécurité exceptionnelle est assez massif.


3 Réponses :


17
votes

Non, il n'y a pas de telle chose en C #. Tous les États que vous souhaitez persister à travers plusieurs appels de méthodes doivent être dans des champs, une instance ou statique.

sauf ... si vous capturez la variable dans une expression de Lambda ou quelque chose comme ça. Par exemple: P>

Func<int> counter = GetCounter();
Console.WriteLine(counter()); // Prints 0
Console.WriteLine(counter()); // Prints 1
Console.WriteLine(counter()); // Prints 2
Console.WriteLine(counter()); // Prints 3


1 commentaires

Utilise une fermeture pour simuler une variable locale statique constitue un code maléfique?



1
votes

Vous devrez créer une variable statique ou d'un élément d'instance de la classe la méthode.


0 commentaires

0
votes
public class Foo
{
    static int _bar = 1;

    public int Bar()
    {
        return ++_bar;
    }
}

0 commentaires