C#. Метод main(). Способы объявления




Метод Main(). Способы объявления. Передача аргументов в функцию Main(). Метод GetCommandLineArgs() класса Environment


Содержание


Поиск на других ресурсах:

1. Назначение метода Main(). Особенности применения

Функция Main() – это специальная функция, которая предназначена для начала выполнения любой программы и имеет следующие особенности применения:

  • функция Main() есть точкой входа в любую программу на языке C#. Термин «точка входа» означает, что выполнение программы начинается из функции Main();
  • функция Main() считается главной функцией в программе, которая может вызывать другие функции, реализованные в программе;
  • функция Main() может получать параметры. С помощью этих параметров другая программа может передавать некоторую информацию (данные) в текущую программу;
  • функция Main() может возвращать целочисленное значение, которое будет сигнализировать о результате выполнения программы. Это необходимо в случаях, если программа вызывается из другой программы (процесса). Чаще всего процессом, который вызывает функцию Main() есть операционная система;
  • в программе функция с именем Main() может быть только одна. Иными словами, функция Main() не может быть перегружена;
  • функция Main() есть статической, то есть в начале объявления содержит модификатор static. Это означает, что функция вызывается без создания экземпляра класса. Статичность функции необходима, так как при первом запуске еще не создано никаких экземпляров классов. Существуют только статические методы и переменные. Эти методы и переменные инициализируются автоматически при первом обращении к ним.

 

2. Способы объявления функции Main()

Функция Main() может быть объявлена одним из четырех возможных способов, перечисленных ниже.

Способ 1. Функция не возвращает значения и не получает параметров. Общая форма функции Main() в этом случае следующая:

static void Main()
{
  // действия, операторы
  // ...
}

Способ 2. Функция возвращает целочисленное значение и не получает параметров. В этом случае общая форма функции следующая

static int Main()
{
  // действия, операторы
  // ...
  return value;
}

Здесь value – некоторое целочисленное значение, которое есть результатом возврата из программы. Другие процессы, запускающие текущую программу, могут использовать этот результат. Например, если функция Main() возвращает -1, то это может означать внутреннюю ошибку. И, наоборот, если функция возвращает 0, то это может означать корректное выполнение программы.

Способ 3. Функция не возвращает значения, но получает параметры. Параметрами функции Main() может быть массив строк. В этом случае общая форма функции следующая:

static void Main(string[] args)
{
  // действия, операторы
  // ...
}

здесь

  • args – массив строк, который передается в функцию Main() из других процессов.

Способ 4. Функция возвращает целочисленное значение и получает параметры. Общая форма объявления функции следующая

static void Main(string[] args)
{
  // действия, операторы
  // ...
  return value;
}

здесь

  • args – массив строк, который передается в функцию Main() из других процессов;
  • value – значение типа int, которое передается в процесс, который вызвал текущую программу.

 

3. Модификаторы доступа, которые могут применяться с функцией Main()

Функция Main() может быть объявлена с двумя модификаторами доступа:

  • private – в этом случае функция Main() не может вызываться из других сборок непосредственно;
  • public – функция Main() есть общедоступной из других сборок.

 



4. Зачем в качестве параметров в функцию Main() передается массив строк?

В качестве параметров в любую программу (функцию Main()) вызывающий процесс (операционная система) может передать только строку символов. Если эта строка содержит слова, которые разделены символом пробел, то эта строка разбивается на массив строк.

Например. Пусть сделан вызов программы с именем Project1.exe следующим образом:

Project1.exe param1 param2 file1.txt

то функция Main() программы Project1.exe получит следующий массив входных параметров

param1
param2
file1.txt

то есть, для следующего объявления функции

void Main(string[] args)
{
  // ...
}

значения переменной args будут следующими:

args.Length = 3
args[0] = "param1"
args[1] = "param2"
args[2] = "file1.txt"

 

5. Пример, который демонстрирует применение параметров в функции Main()

В примере продемонстрирован вывод массива параметров на экран. Программа создана по шаблону Console Application.

using System;

namespace ConsoleApp1
{
  class Program
  {
    static void Main(string[] args)
    {
      // Пример вывода массива параметров args на экран
      Console.WriteLine("args.Length = {0}", args.Length);

      for (int i = 0; i < args.Length; i++)
      {
        Console.WriteLine("args[{0}] = {1}", i, args[i]);
      }
    }
  }
}

Результат выполнения программы ConsoleApp1.exe для строки

ConsoleApp1 param1 param2 file1.txt

имеет следующий вид

args.Length = 3
args[0] = param1
args[1] = param2
args[2] = file1.txt

 

6. Установка параметров, которые передаются в функцию Main(), средствами Microsoft Visual Studio 2019

В системе Microsoft Visual Studio любой версии можно задавать параметры, которые передаются в функцию Main(). Эти параметры еще называются аргументы командной строки.

Чтобы задать аргументы командной строки используется команда Properties… из меню Project.

Например, если создано консольное приложение с именем решения ConsoleApp1, то вызвать окно настройки параметров можно с помощью команды

Project -> ConsoleApp1 Properties...

как показано на рисунке 1.

Microsoft Visual Studio - C#. Команда вызова свойств проекта

Рисунок 1. Команда вызова свойств проекта

В результате откроется окно «ConsoleApp1», в котором нужно активировать элемент Debug (рисунок 2). В левой части окна в поле «Application arguments» нужно ввести аргументы командной строки. Эти аргументы будут передаваться в функцию Main(). Таким образом, можно протестировать вызов текущей программы из других процессов передавая программе различные варианты аргументов.

MS Visual Studio - C#. Функция Main(). Установка аргументов командной строки

Рисунок 2. Установка аргументов командной строки

 

7. Каким образом в функцию Main() передать строку, которая содержит пробелы?

Бывают случаи, когда в функцию Main() нужно передать строку как один параметр. Но эта строка может содержать пробелы. В этом случае строку нужно заключить в двойные кавычки. Все что размещается между двойными кавычками не разбивается по параметрам.

Например. Пусть в функцию Main() для приложения с именем ConsoleApp1.exe нужно передать два параметра-строки:

  • «This is a parameter»;
  • «Second parameter».

В этом случае, вызов ConsoleApp1.exe из другого процесса (например, из командной строки) будет следующим:

ConsoleApp1.exe "This is a parameter" "Second parameter"

В этом случае в функцию Main() будут переданы следующие значения массива args:

args.Length = 2
args[0] = "This is a parameter"
args[1] = "Second parameter"

 

8. Получение параметров с помощью метода GetCommandLineArgs() класса Environment. Пример

Получить параметры командной строки можно с помощью метода GetCommandLineArgs() класса Environment. Этот метод есть статическим, а потому не нужно создавать экземпляр класса Environment. Метод возвращает массив аргументов типа string[].

Важно помнить, что метод GetCommandLineArgs() возвращает массив параметров на один больше. Первым параметром, который возвращает метод (под индексом 0) идет полное имя к текущему выполняемому файлу.

Пример. Вывод на экран списка параметров, передаваемых в функцию Main().

using System;

namespace ConsoleApp1
{
  class Program
  {
    static void Main(string[] args)
    {
      // Вывести список параметров с помощью метода GetCommandLineArgs()
      // класса Environment
      string[] parameters = Environment.GetCommandLineArgs();

      Console.WriteLine("Parameters:");

      foreach (string s in parameters)
      {
        Console.WriteLine(s);
      }

      Console.ReadKey();
    }
  }
}

 

9. Определение полного имени файла выполняемой программы

Полное имя файла выполняемой программы можно определить с помощью статического метода GetCommandLineArgs() класса Environment. Как известно, метод используется для определения параметров текущей программы в виде массива строк типа string[]. При вызове метода, параметр, который возвращается, с индексом 0 содержит полное имя файла текущей программы.

Нижеследующий фрагмент кода демонстрирует вывод полного имени файла текущей программы

// Вывести полный путь к файлу текущей программы
string path = Environment.GetCommandLineArgs()[0];
Console.WriteLine("Full path = {0}", path);

 


Связанные темы