web-dev-qa-db-fra.com

Arguments de l'application console, comment les arguments sont transmis à la méthode Main

Ce serait une question de c # débutant. Lorsque je crée une application console, j'obtiens la méthode Main avec le paramètre args sous forme de chaîne de tableau . Je ne comprends pas comment cette méthode est appelée par le système ni comment les arguments sont transmis à la méthode Main. Peut-être que quelqu'un pourrait expliquer? La méthode Main est-elle surchargée d'une sorte de classe de console?

namespace ConsoleApplication1
{
    class Program
    {    
        static void Main(string[] args)
        {    
        }
    }
}
23
Tomas

La méthode Main est le point d’entrée de votre application. Si vous passez par ildasm alors 

.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint

C'est ce qui aide à appeler la méthode

Les arguments sont passés en tant que say C:\AppName arg1 arg2 arg3

21
V4Vendetta

Toutes les réponses sont géniales et expliquent tout très bien 

mais je veux juste signaler differant way for passing args à la méthode principale

en studio visuel 

  1. right click on project puis choisissez Properties
  2. allez à debug tab puis dans la section start options, fournissez vos arguments à l'application 

comme cette image

 Properties window

et heureux savoir secrets 

38
Basheer AL-MOMANI

Le runtime divise les arguments donnés sur la console à chaque espace.

Si vous appelez

myApp.exe arg1 arg2 arg3

La méthode principale obtient un tableau de 

var args = new string[] {"arg1","arg2","arg3"}
11
Zebi

Comment s'appelle main?

Lorsque vous utilisez le modèle d'application de la console, le code est compilé et nécessite une méthode appelée Main dans l'objet de démarrage, car Main est commercialisé en tant que point d'entrée de l'application.

Par défaut, aucun objet de démarrage n'est spécifié dans les paramètres de propriété du projet et la classe Program sera utilisée par défaut. Vous pouvez modifier cela dans la propriété du projet sous l'onglet "Construire" si vous le souhaitez.

Gardez à l'esprit que tout objet que vous affectez à l'objet de démarrage doit contenir une méthode nommée Main.

Comment les arguments sont-ils passés à la méthode principale

Le format accepté est MyConsoleApp.exe valeur01 valeur02 etc ...

L'application attribue chaque valeur après chaque espace dans un élément distinct du tableau de paramètres.

Ainsi, MyConsoleApp.exe valeur01 valeur02 signifiera que votre paramètre args a 2 éléments:

[0] = "value01"

[1] = "value02"

Comment vous analysez les valeurs d'entrée et les utilisez, c'est à vous de décider.

J'espère que cela a aidé.

Lecture supplémentaire:

Création d'applications console (Visual C #)

Arguments de ligne de commande (Guide de programmation C #)

9
Nope

dans Visual Studio, vous pouvez également faire comme ça pour passer simplement ou en évitant de l'argumentation standard

 static void Main(string[] args)
    {
        if (args == null)
        {
            Console.WriteLine("args is null"); // Check for null array
        }
        else
        {
            args=new string[2];
            args[0] = "welcome in";
            args[1] = "www.overflow.com";
            Console.Write("args length is ");
            Console.WriteLine(args.Length); // Write array length
            for (int i = 0; i < args.Length; i++) // Loop through array
            {
                string argument = args[i];
                Console.Write("args index ");
                Console.Write(i); // Write index
                Console.Write(" is [");
                Console.Write(argument); // Write string
                Console.WriteLine("]");
            }
        }
2
Adiii

Chaque exe géré a un point d’entrée qui peut être vu lorsque vous chargez votre code dans ILDASM. Le point d'entrée est spécifié dans l'en-tête CLR et devrait ressembler à ceci.

enter image description here

1
abhilash

Lire _ MSDN .

il contient également un lien vers les arguments.

réponse courte: Non, le principal n'est pas remplacé. quand visual studio (en fait le compilateur) construit votre exe, il doit déclarer un point de départ pour l'assemble, ce point est la fonction principale. 

si vous vouliez savoir comment passer littéralement des arguments, vous pouvez soit exécuter votre application à partir de la ligne de commande (par exemple, appname.exe param1 param2) ou dans la configuration du projet, entrez-les (dans les arguments de ligne de commande de l'onglet Débogage).

dans l'ensemble, vous devrez lire ces arguments, par exemple:

for (int i = 0; i < args.Length; i++)
{
    string flag = args.GetValue(i).ToString();
    if (flag == "bla") 
    {
        Bla();
    }
}
1
Nadav Ben-Gal

Les arguments peuvent être passés via la ligne de commande et il ne peut y avoir aucun argument 

1
Aravind

Les arguments de ligne de commande sont un moyen de passer les arguments. Cet exemple msdn vaut la peine d'être extrait . La page MSDN [ ] pour les arguments de ligne de commande mérite également d'être lue.

Dans Visual Studio, vous pouvez définir les arguments de ligne de commande en choisissant les propriétés de votre application console, puis en sélectionnant l'onglet Débogage.

1
IndigoDelta

vous pouvez également passer en créant une fonction, puis dans cette fonction, vous appelez la méthode main et transmettez les arguments à la méthode main.

static int Main(string[] args)
    {


        foreach (string b in args)
            Console.WriteLine(b+"   ");

        Console.ReadKey();
        aa();
        return 0;

    }
    public static void aa()
    {
        string []aaa={"Adil"};

        Console.WriteLine(Main(aaa));
    }
0
Adiii

La méthode principale du moteur d’exécution ressemble à quelque chose comme int main(int argc, char *argv[]), où argc représente le nombre d’arguments et argv représente un tableau de pointeurs pour chacun. Le moteur d'exécution convertit cela en une forme plus naturelle à c #.

Avant que cette méthode principale ne soit appelée, tout est en langage Assembly. Il a accès aux arguments de la ligne de commande (car le système d'exploitation le met à la disposition de chaque processus qui démarre), mais ce langage Assembly doit convertir une seule chaîne de la ligne de commande complète en plusieurs sous-chaînes (en utilisant des espaces pour les séparer) prêt à les passer à main ().

0
mah