IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Explication de bout de code [Débutant]


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 233
    Points : 92
    Points
    92
    Par défaut Explication de bout de code
    Bonjour,

    Débutant en C#, j'ai récupéré le bout de code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class Program
        {
            static void Main(string[] args)
            {
                Fibonacci monFibo = new Fibonacci();
                Thread fiboThread = new Thread(monFibo.CalculFibo);
     
                Random random = new Random();
                Thread randomThread = new Thread(() => { while (true) { Console.WriteLine(random.Next(1000)); System.Threading.Thread.Sleep(500); } });
     
                fiboThread.Start();
                randomThread.Start();
                fiboThread.Join();            
            }
        }
    Est-ce que quelqu'un peut m'expliquer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Console.WriteLine(random.Next(1000)); System.Threading.Thread.Sleep(500); } });
    Merci d'avance!

  2. #2
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour.

    La ligne en question crée un thread qui boucle à l'infini, affichant un nombre aléatoire entre 0 et 999, puis se mettant en pause pour 500ms.

    Quant à l'intérêt, je dirais aucun.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 233
    Points : 92
    Points
    92
    Par défaut
    Merci!

    Et pourquoi la syntaxe =>?
    Je peux aussi créer ce thread avec une nouvelle classe n'est-ce pas?

  4. #4
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Citation Envoyé par bilou_12 Voir le message
    Et pourquoi la syntaxe =>?
    Je peux aussi créer ce thread avec une nouvelle classe n'est-ce pas?
    Cette syntaxe correspond à ce que l'on appelle un lambda, c'est à dire une fonction anonyme. Le code pourrait être écrit de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thread randomThread = new Thread(RandomThreadMainFunction);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    static void RandomThreadMainFunction()
    {
       while (true) { Console.WriteLine(random.Next(1000)); System.Threading.Thread.Sleep(500); }
    }
    C'est d'ailleurs exactement ce que fait le compilateur quand on utilise la syntaxe lambda : il crée dans la classe une fonction privée contenant le code du lambda.

    D'ailleurs le code que je montre utilise encore un autre raccourci : en réalité on doit passer en argument du constructeur de Thread un délégué vers la fonction RandomThreadMainFunction. Il faut donc instancier le délégué avant d'appeler le constructeur, une étape rajoutée à la volée par le compilateur lors de la compilation en MSIL. Note aussi que la méthode a été déclarée en statique, on pourrait cependant utiliser une méthode d'instance si besoin était.

    Enfin, oui, il est tout à fait possible de créer une classe dédiée à ce thread, sur le modèle suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    class MainThread
    {
       private Thread _thread;
     
       public MainThread()
       {
           _thread = new Thread(RandomThreadMainFunction);
       }
     
       public void Start()
       {
          _thread.Start();
       }
     
       private  static void RandomThreadMainFunction()
       {
          while (true) { Console.WriteLine(random.Next(1000)); System.Threading.Thread.Sleep(500); }
       }
    }

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 233
    Points : 92
    Points
    92
    Par défaut
    Merci DonQuiche!!! T'es au top!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB] Explication bout de code
    Par Ledaf dans le forum SDK
    Réponses: 0
    Dernier message: 24/03/2009, 16h11
  2. Explication d'un (tout petit) bout de code^^
    Par xclam dans le forum Langage
    Réponses: 5
    Dernier message: 31/05/2007, 09h49
  3. explication d'un bout de code ASP
    Par mademoizel dans le forum ASP
    Réponses: 4
    Dernier message: 22/05/2007, 13h03
  4. explication sur un bout de code
    Par poporiding dans le forum C++
    Réponses: 2
    Dernier message: 27/06/2006, 18h04
  5. Besoin d'explications sur un bout de code
    Par zizitop dans le forum C
    Réponses: 7
    Dernier message: 26/04/2005, 14h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo