2010-09-02 4 views
2

Consultez le code suivant:Pouvez-vous instancier une classe dans son propre point d'entrée?

class Program 
{ 

    static void Main(string[] args) 
    { 
     new Program().Run(args); 
    } 

    void Run(string[] args) 
    { 
     ... 
    } 

    ... 
} 

Maintenant, cela fonctionne comme je l'attends, et certainement je ne vois rien évidemment faux, mais ce code me instinctuellement inquiète. J'ai donc trois questions:

  • Ce comportement est-il bien défini par le compilateur?
  • Est-ce que ce code fait ce que je m'attends à faire?
  • Ce code est-il conforme aux meilleures pratiques?
+0

Il n'y a absolument rien de mal à ce que vous faites. Les méthodes statiques créent des instances de la classe environnante tout le temps (voir le modèle singleton, par exemple). –

Répondre

3

Oui, ce code est valide et fait ce que vous attendez de lui.

Main est juste une méthode statique. Le fait que ce soit le point d'entrée signifie simplement que le CLR l'appelle au démarrage. Il est parfaitement valide d'instancier une classe dans une méthode statique et d'y appeler des méthodes.

+0

Oui, c'est juste une autre méthode. C'est seulement spécial car il est appelé une fois au démarrage. Il n'y a pas de mal à rappeler la méthode plus tard, cela ne change rien aux autres méthodes statiques, alors ne vous inquiétez pas. – JonWillis

1

Oui, oui et oui. Je ne vois pas pourquoi cela devrait déranger quelqu'un.

Un point d'entrée tel que Main() n'est pas identique à un constructeur, en plus il est statique. Quand elle s'exécute, la classe est entièrement définie, tous les membres statiques sont disponibles et les instances peuvent être créées sans aucun problème.

Questions connexes