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

- Compte rendu : SharePoint / O365 : des pratiques pour une meilleure productivité par The Mit's Blog le 12-12-2014, 18:11

- [TFS] Suppression des feature SQL Entreprise en masse par Blog de Jérémy Jeanson le 12-06-2014, 09:18

- [Clean Code] règles de nommage par Fathi Bellahcene le 12-04-2014, 22:59

- Windows To Go 10 et Upgrades impossibles par Blog de Jérémy Jeanson le 12-04-2014, 21:38

- SharePoint OnPremise: Statistiques d’utilisation pour traquer les sites fantomes par Blog Technique de Romelard Fabrice le 12-03-2014, 10:28

- SharePoint 2007: Script PowerShell permettant le backup de toutes les collections de sites d’une application Web par Blog Technique de Romelard Fabrice le 12-02-2014, 10:00

- Xamarin : un choix précieux par .net is good... C# is better ;) le 12-01-2014, 15:10

- Office 365: Comparaison des composants pour préparer votre migration de SharePoint 2007 vers Office 365 par Blog Technique de Romelard Fabrice le 11-28-2014, 16:20

- Créer un périphérique Windows To Go 10 ! par Blog de Jérémy Jeanson le 11-21-2014, 04:54

- RDV à Genève le 12 décembre pour l’évènement “SharePoint–Office 365 : des pratiques pour une meilleure productivité !” par Le blog de Patrick [MVP Office 365] le 11-19-2014, 10:40