Аргументы консольного приложения, как аргументы передаются методу Main - PullRequest
25 голосов
/ 27 мая 2011

Это будет вопрос от начинающего c #. Когда я создаю консольное приложение, я получаю метод Main с параметром args в виде строки массива. Я не понимаю, как этот метод вызывается системой и как аргументы передаются в метод Main. Может кто-нибудь мог объяснить? Является ли метод Main переопределенным для некоторого консольного класса?

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

Ответы [ 11 ]

45 голосов
/ 13 июля 2016

Все ответы потрясающие и все очень хорошо объяснили

, но я просто хочу указать differant way for passing args на основной метод

в visual studio

  1. right click on project, затем выберите Properties
  2. , перейдите на debug tab, затем в разделе start options предоставьте приложению свои аргументы

как это изображение

Properties window

и счастливые, зная секреты

21 голосов
/ 27 мая 2011

Основной метод - это точка входа вашего приложения.Если вы оформляете заказ через ildasm, тогда

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

Это то, что помогает при вызове метода

Аргументы передаются как скажем C:\AppName arg1 arg2 arg3

13 голосов
/ 27 мая 2011

Среда выполнения разделяет аргументы, заданные на консоли, в каждом пространстве.

Если вы позвоните

myApp.exe arg1 arg2 arg3

Основной метод получает массив

var args = new string[] {"arg1","arg2","arg3"}
9 голосов
/ 27 мая 2011

Как называется main?

Когда вы используете шаблон консольного приложения, код будет скомпилирован, для чего потребуется метод с именем Main в объекте запуска, так как Main is market является точкой входа в приложение.

По умолчанию ни один объект запуска не указан в настройках свойств проекта, и класс Программы будет использоваться по умолчанию. Вы можете изменить это в свойстве проекта на вкладке «Сборка», если хотите.

Имейте в виду, что любой объект, который вы назначаете в качестве объекта запуска, должен иметь метод с именем Main.

Как аргументы передаются методу main

Допустимый формат: MyConsoleApp.exe значение01 значение02 и т. Д. *

Приложение назначает каждое значение после каждого пробела в отдельный элемент массива параметров.

Таким образом, MyConsoleApp.exe value01 value02 будет означать, что ваш параметр args имеет 2 элемента:

[0] = "value01"

[1] = "value02"

Как вы анализируете входные значения и используете их, зависит только от вас.

Надеюсь, это помогло.

Дополнительное чтение:

Создание консольных приложений (Visual C #)

Аргументы командной строки (Руководство по программированию в C #)

3 голосов
/ 18 января 2015

в визуальной студии вы также можете сделать так, чтобы просто передать или уклониться от аргумента командной строки

 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("]");
            }
        }
1 голос
/ 27 мая 2011

Чтение MSDN .

также содержит ссылку на аргументы.

краткий ответ: нет, основной не переопределяется.Когда Visual Studio (на самом деле компилятор) строит ваш exe-файл, он должен объявить начальную точку для ассемблера, эта точка является основной функцией.

если вы имели в виду, как передавать литературные аргументы, вы можете либо запустить приложение с ними из командной строки (например, appname.exe param1 param2), либо в настройках проекта ввести их (в командной строке).аргументы на вкладке Debug)

в основном вам нужно прочитать эти аргументы, например:

for (int i = 0; i < args.Length; i++)
{
    string flag = args.GetValue(i).ToString();
    if (flag == "bla") 
    {
        Bla();
    }
}
1 голос
/ 27 мая 2011

У каждого управляемого exe есть точка входа, которую можно увидеть, когда вы загружаете свой код в ILDASM.Точка входа указывается в заголовке CLR и будет выглядеть примерно так:

enter image description here

1 голос
/ 27 мая 2011

Аргументы командной строки - это один из способов передачи аргументов. Этот пример msdn стоит проверить. Страница MSDN для аргументов командной строки также стоит прочитать.

В Visual Studio вы можете установить аргументы командной строки, выбрав свойства консольного приложения, затем выбрав вкладку «Отладка» * 1007.*

1 голос
/ 27 мая 2011

Аргументы могут передаваться через командную строку, а также не может быть аргументов.

0 голосов
/ 18 января 2015

вы также можете передать, сделав функцию, а затем в этой функции вы вызываете метод main и передаете аргумент методу 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));
    }
...