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.

MS Visual Studio. Команда виклику властивостей проекту

Рисунок 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);

 


Зв’язані теми