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

- Localisation et globalisation ne sont pas des options par Blog de Jérémy Jeanson le 01-17-2015, 11:47

- [Clean Code] les commentaires… par Fathi Bellahcene le 01-10-2015, 17:17

- Mise à jour de Test Professional 2013 par Blog de Jérémy Jeanson le 01-10-2015, 11:32

- [Dynamics CRM] Ajouter un bouton pour déclencher un workflow ou un script (dialogue) par Christine Dubois le 01-09-2015, 14:03

- RDV aux #SharePoint Days 2015 à Casablanca les 28 et 29 janvier ! par Le blog de Patrick [MVP Office 365] le 01-06-2015, 08:41

- TFS Online, vous allez aimer vos projets par Blog de Jérémy Jeanson le 01-03-2015, 11:19

- Bon code 2015 ! par Blog de Jérémy Jeanson le 01-02-2015, 19:01

- [Dynamics CRM] Créer un contact à partir d’une signature email par Christine Dubois le 12-30-2014, 14:37

- SharePoint: Les stratégies de migration - Etape 1 - Préparation par Blog Technique de Romelard Fabrice le 12-24-2014, 16:36

- Faire un workflow personnalisé avec email et colonne de type plusieurs lignes de texte et ajouter des modifications à un texte existant par Le petit blog de Pierre / Pierre's little blog le 12-23-2014, 14:55