2011-05-27 3 views
12

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

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

ответ

18

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

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

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

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

0

Основной метод работы среды выполнения выглядит примерно так: int main(int argc, char *argv[]), где argc - количество аргументов, а argv - массив указателей на каждый. Механизм времени выполнения преобразует его в форму, более естественную для C#.

Перед тем, как этот главный метод называется, все на языке ассемблера. Он имеет доступ к аргументам командной строки (поскольку операционная система делает это доступным для каждого процесса, который запускается), но этот язык ассемблера должен преобразовать одну строку из полной командной строки в несколько подстрок (используя пробел для их разделения), прежде чем готовы передать их в main().

6

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

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

myApp.exe arg1 arg2 arg3 

Главный метод получает массив аргументов

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

командной строки один способ передать аргументы в. This MSDN пример стоит проверить. Для аргументов командной строки также стоит прочитать MSDN Page.

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

+0

был ответ, который я искал, как передать параметры отладки главного метода в VS. – RobertoFRey

1

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

enter image description here

1

Read MSDN.

В нем также содержится ссылка на args.

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

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

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

for (int i = 0; i < args.Length; i++) 
{ 
    string flag = args.GetValue(i).ToString(); 
    if (flag == "bla") 
    { 
     Bla(); 
    } 
} 
8

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

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

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

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

Как арг передается основному методу

Принятый формат MyConsoleApp.exe value01 value02 и т.д. ...

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

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

[0] = "value01" 

[1] = "value02" 

Как вы синтаксический анализ входных значений и использовать их до вас.

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

Дополнительная литература:

Creating Console Applications (Visual C#)

Command-Line Arguments (C# Programming Guide)

0

можно передать также сделав функцию, а затем в этой функции вы называете основной метод и передать аргумент основной метод

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)); 
    } 
2

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

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("]"); 
      } 
     } 
24

Все ответы являются удивительными и объяснил все очень хорошо

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

в визуальной студии

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

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

Properties window

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

Смежные вопросы