[C#]Static variable

Salut tout le monde,
Une petite question, j'ai admettons:

public class MaClasseAMoiQueJAi
{
      public MaClasseAMoiQueJAi()
     {
             if (monStringCache!="")
             {
                      MaString=monStringCache;
              }
              else
              {
                       MessageBox("Blabla");
               }
      }
      private static string monStringCache="";
      public string MaString;
}


Bon je sais une string public c'est pas beau, mais c'est juste pour la question...
Bref, je voudrais savoir une fois que ma string private est assignee (static je rappelle), quand elle sera remise a "", plusieurs possibilite a mon avis mais je ne sais pas laquelle est la bonne:

1-Jamais (ca m'etonnerait si je ne serialise/deserialise pas)
2-Quand je quitte l'application
3-Quand je quitte la librairie
4-Quand je n'ai plus aucune instance (ca me parait bizzare...)

Voila, j'aimerai savoir :o)

Merci

.  .  Dieu a inventé le chat
\_/  pour que l'homme puisse caresser le tigre

5 réponses

  1. Contributeur
    Salut teutates...
    C# est un langage imperatif, oui. Les chaines de caracteres sont de fait identifier par leur adresse memoire, de toutes facons il est impossible de changer la valeur d'une chaine directement, une nouvelle affectation affecte en fait un autre endroit dans la memoire avec la nouvelle valeur... Il ne s'agit aps ici d'un processus mais d'une variable...
    En fait je craignais que la statique se reinitialise des que je n'aurais plus d'instance vivante de ma classe, apparement non, elle se reinitialise quand je coupe et relance le programme...Comme je suis dans une dll, c'est meme quand le exe qui a lance la dll se coupe...a priori...mais ca c'est pour le moment plus dur a tester, j'ai pas encore entiermenet confiance dans le Garbage collector...

    .  .  Dieu a inventé le chat
    \_/  pour que l'homme puisse caresser le tigre
    1. Contributeur
      je ne connais pas C#, je donne juste mon avis => Je pense q C# est un langage impératif (au sens suite d'actions et une variable est identifiée par son adresse mémoire) et donc je pense que tant q tu ne remets pas manuellement la string a "", elle ne sera jamais remplacée, son adresse sera juste réallouée a un autre processus lorsq la processus sera terminé et donc on ne touche pas a son contenu.
      C'est tout ce q j'avais a dire, si t'as plus d'infos, n'hesites, cela m'interresserai.

      tafiscobar "lou waye def bopame"
      la nullite n'existe pas, l'ignorance oui, ah je suppose!!!
      1. Contributeur
        Tu peux faire confiance au garbage collector..c'est celui de java en mieux ^^
        1. Contributeur
          :o)
          Oui mais je ne m'y suis pas encore fait completement :o) Pour une fois que un truc Microsoft a l'air vraiment bien je ne peux m'empecher de chercher ou est le gros probleme :o)

          .  .  Dieu a inventé le chat
          \_/  pour que l'homme puisse caresser le tigre
          1. Contributeur
            Bonjour ou Bonsoir,

            D'apres mes souvenirs ta variable est initialisée a la construction de ta classe a "". (on commence par faire toutes les initialisations avant de regarder le contenu des methodes)

            Pour savoir quand ta variable sera effacer il faut connaitre l'ordre d'appel de ton programme ... logiquement a partir du moment ou tu ne fait plus refereence a cette classe elle devrait disparaitre ...

            JSS.souvenirs.en.compilo.:-)
            1. Contributeur

              logiquement a partir du moment ou tu ne fait plus refereence a cette classe elle devrait disparaitre ...


              apparament tu penses autrement ... qu'elles sont tes preuves ?

              JSS.bizarre.c'etait.pas.comme.ca.qu'on.me.l'avait.expliquer....
            2. Contributeur
              Ben il s'agit d'une methode Static (de classe autrement dit pour les puristes, et non d'instance), donc si lorsque l'instance disparait, la static aussi on perd un peu de l'interet...Moyennant ca c'est le risque que je craignais mais apres un essai vite fait ca a l'air d'aller...

              .  .  Dieu a inventé le chat
              \_/  pour que l'homme puisse caresser le tigre
            3. Contributeur
              @teebod'accord donc en fait ta classe est statique aussi ?

              Ce qui signifie que toutes les classes statiques sont mises en place au début par le compilo et sont effacer uniquement a la fin ... ca me semble logique en y reflechissant un peu plus :-)

              JSS.en.apprends.tous.les.jours.:-)
            4. Contributeur
              @teeboComment veux tu qu'une classe soit statique? Au pire tu peux virer ton constructeur voire la mettre abstract, mais static n'a aucun sens pour une classe 8-)

              .  .  Dieu a inventé le chat
              \_/  pour que l'homme puisse caresser le tigre
            5. Contributeur
              @teeboen fait j'avais pas fait attention au fait que ta variable etait statique ....
              je sous entendait par classe statique le fait que ta classe possedait des variables statiques :-)
              désolé je suis un peu dans le gaz ce matin :-)
              et désolé pour cet abus de langage

              JSS