Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Atteint de JavaScriptite Aiguë [Cyril Durand]

Expert ASP.net Ajax et WCF, Cyril Durand parle dans son blog de point techniques sur ASP.net, ASP.net Ajax, JavaScript, WCF et .net en général. Cyril est également consultant indépendant, n'hésitez pas à le contacter pour de l'assistance sur vos projets

Actualités

  • Blog de Cyril DURAND, passionné de JavaScript, Ajax, ASP.net et tout ce qui touche au developpement Web Client-Side.

    N'hésitez pas à me contacter pour vos projets .net : architecture, accompagnement, formation, ...

    View Cyril Durand's profile on LinkedIn
    hit counters


    Expertise Commerce server et BizTalk

Static en VB
Tout à l'heure j'ai découvert le mot clé Static en VB
 
Voici un exemple d'utilisation :
 

Module Module1

       Sub
Main()
               For index As Integer = 1 To 10
                     Toto()
               Next
              
Console.ReadLine()
        
End Sub

       Private Sub Toto()
              Static increment As Integer = 2
              
             
increment += 1
              Console.WriteLine(increment)
      
End Sub

End
Module

Au final voila ce que ca donne

Je pense pas que j'ai besoin d'expliquer à quoi ca sert :-) l'exemple est assez explicite je trouve. On peut déclarer des variables static uniquement dans des méthodes. Ce qu'il y a d'interessant c'est que la variable increment est disponible seulement dans la méthode Toto.

J'ai bien sur voulu en savoir un peu plus sur comment ca fonctionne en interne, j'ai donc lancé mon outil favoris : Reflector voici ce que ca m'a donné (en C#)

[StandardModule]
internal sealed class Module1
{
      // Methods
      [DebuggerNonUserCode]
      static Module1();
      [STAThread]
      public static void Main();
      private static void Toto();

      // Fields
      private static int $STATIC$Toto$001$increment;
      private static StaticLocalInitFlag $STATIC$Toto$001$increment$Init;
}

On voit donc que le compilo a déclarer une variable shared en VB ou static en C# suivit d'une autre variable static de type StaticLocalInitFlag, ce type la est contenu dans l'assembly Microsoft.VisualBasic et est donc propre à VB :-)
 
Ensuite dans la méthode Toto on a (j'ai raccourci les noms des variables car ca devenait illisible) :
private static void Toto()
{
      Monitor.Enter(Module1.increment$Init);
      try
      {
            if (Module1.increment$Init.State == 0)
            {
                  Module1.increment$Init.State = 2;
                  Module1.increment = 2;
            }
            else if (Module1.increment$Init.State == 2)
            {
                  throw new IncompleteInitialization();
            }
      }
      finally
      {
            Module1.increment$Init.State = 1;
            Monitor.Exit(Module1.increment$Init);
      }
      Module1.increment++;
      Console.WriteLine(Module1.increment);
}
Pour ceux qui connaissent pas monitor.enter vous pouvez voir la description ici : ici, cela permet d'avoir un accés exclusif à la variable (au cas ou plusieurs thread essaye de s'en servir), le reste est facilement compréhensible, on regarde si on a déjà initialisé la variable ou non (voila à quoi sert le flag)
 
Posted: lundi 6 février 2006 13:09 par cyril
Classé sous :
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

sebmafate a dit :

il me semble que static existait déjà en VB6...
# février 6, 2006 14:22

Renaud COMTE a dit :

Si tu veux aller encore plus loin jette donc un oeil sur la notion de singleton !!!!
# février 6, 2006 16:18

yaka a dit :

En effet, la notion STATIC a "toujours" existée en VB.
De memoire au moins depuis VB3.
Je sais ... ca date un peu.
# février 6, 2006 17:29

neodante a dit :

Comme dit Renaud, regarde du côté du Singleton qui est un Design Partern (moi je ne l'appel pas de la sorte mais l'important c'est que le nom évoque quelque chose à tout le monde ;-)).

Pour résumer, cela te permet d'avoir une instance unique de ton objet dans toute l'application. Cela repose sur un constructeur privé et une méthode qui instancie une unique instance de ton objet en statique.

Effectivement je me souviens aussi d'avoir utilisé static en VB6, wao c'était il y a vraiment longtemps ! ;-)

++

++
# février 7, 2006 11:50
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- L’application des MiniDrones Parrot est aussi disponible pour Windows 8.1 par Blog de Jérémy Jeanson le 10-28-2014, 15:01

- L’application des MiniDrones Parrot est enfin disponible pour Windows Phone par Blog de Jérémy Jeanson le 10-27-2014, 09:49

- Mise à jour Samsung 840 EVO sur core server par Blog de Jérémy Jeanson le 10-27-2014, 05:59

- MVP Award 2014 ;) par Blog de Jérémy Jeanson le 10-27-2014, 05:42

- « Naviguer vers le haut » dans une librairie SharePoint par Blog de Jérémy Jeanson le 10-07-2014, 13:21

- PowerShell: Comment mixer NAGIOS et PowerShell pour le monitoring applicatif par Blog Technique de Romelard Fabrice le 10-07-2014, 11:43

- ReBUILD 2014 : les présentations par Le blog de Patrick [MVP Office 365] le 10-06-2014, 09:15

- II6 Management Compatibility présente dans Windows Server Technical Preview avec IIS8 par Blog de Jérémy Jeanson le 10-05-2014, 17:37

- Soft Restart sur Windows Server Technical Preview par Blog de Jérémy Jeanson le 10-03-2014, 19:43

- Non, le certificat public du CA n’est pas un certificat client !!! par Blog de Jérémy Jeanson le 10-03-2014, 00:08