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

- Etes-vous yOS compatible ? (2/3) : la nouvelle plateforme Yammer–Office 365–SharePoint par Le blog de Patrick [MVP SharePoint] le 04-22-2014, 09:27

- [ #Yammer ] [ #Office365 ] Quelques précisions sur l’activation de Yammer Entreprise par Le blog de Patrick [MVP SharePoint] le 04-22-2014, 09:03

- Après Montréal, ce sera Barcelone, rendez-vous à la European SharePoint Conference 2014 ! par Le blog de Patrick [MVP SharePoint] le 04-19-2014, 09:21

- Emportez votre sélection de la MSDN dans la poche ? par Blog de Jérémy Jeanson le 04-17-2014, 22:24

- [ #Office365 ] Pb de connexion du flux Yammer ajouté à un site SharePoint par Le blog de Patrick [MVP SharePoint] le 04-17-2014, 17:03

- NFluent & Data Annotations : coder ses propres assertions par Fathi Bellahcene le 04-17-2014, 16:54

- Installer un site ASP.net 32bits sur un serveur exécutant SharePoint 2013 par Blog de Jérémy Jeanson le 04-17-2014, 06:34

- [ SharePoint Summit Montréal 2014 ] Tests de montée en charge SharePoint par Le blog de Patrick [MVP SharePoint] le 04-16-2014, 20:44

- [ SharePoint Summit Montréal 2014 ] Bâtir un site web public avec Office 365 par Le blog de Patrick [MVP SharePoint] le 04-16-2014, 18:30

- Kinect + Speech Recognition + Eedomus = Dommy par Aurélien GALTIER le 04-16-2014, 17:17