Полное руководство по языку программирования С# 14 и платформе .NET 10 / Классы, структуры и пространства имен

Класс Program и метод Main. Программы верхнего уровня

Начальный ⏱ 3 мин чтения 👁 2 🕓 обновлено 11.08.2026

Точкой входа в программу на языке C# является метод Main. Именно с этого метода начинается выполнение программы на C#. И программа на C# должна обязательно иметь метод Main. Однако может возникнуть вопрос, какой еще метод Main, если, например, Visual Studio 2022 по умолчанию создает проект консольного приложения со следующим кодом:


// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

И эта программа никаких методов Main не содержит, но при этом нормально выполняется и выводит на консоль строку "Hello, World!", как и запланировано. Это так называемая программа верхнего уровня (top-level program). А вызов Console.WriteLine("Hello, World!") представляет инструкцию вехнего уровня (top-level statement)

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


class Program
{
	static void Main(string[] args)
	{
		// See https://aka.ms/new-console-template for more information
		Console.WriteLine("Hello, World!");
	}
}

Определение метода Main обязательно начинается с модификатора static, которое указывает, что метод Main - статический. Позже мы подробнее разберем, что все это значит.

Возвращаемым типом метода Main обязательно является тип void. Кроме того, в качестве параметра он принимает массив строк - string[] args - в реальной программе это те параметры, через которые при запуске программы из консоли мы можем передать ей некоторые значения. Внутри метода располагаются действия, которые выполняет программа.

До Visual Studio 2022 все предыдущие студии создавали по умолчанию примерно такой код. Но начиная с Visual Studio 2022 нам необязательно вручную определять класс Program и в нем метод Main - компилятор генерирует их самостоятельно.

Если мы определяем какие-то переменные, константы, методы и обращаемся к ним, они помещаются в метод Main. Например, следующая программа верхнего уровня


string hello = "Hello METANIT.COM";

Print(hello);

void Print(string message)
{
	Console.WriteLine(message);
}

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


class Program
{
	static void Main(string[] args)
	{
		string hello = "Hello METANIT.COM";

		Print(hello);

		void Print(string message)
        {
			Console.WriteLine(message);
        }
	}
}

Если определяются новые типы, например, классы, то они помещаются вне класса Program. Например, код:


Person tom = new();
tom.SayHello();

class Person
{ 
    public void SayHello() =>Console.WriteLine("Hello");
}

будет аналогичен следующему


class Program
{
	static void Main(string[] args)
	{
		Person tom = new();
		tom.SayHello();
	}
}
class Person
{
	public void SayHello() => Console.WriteLine("Hello");
}

Однако надо учитывать, что опредления типов (в частности классов) должны идти в конце файла после инструкций верхнего уровня. То есть:


// инструкции верхнего уровня (top-level statements)
Person tom = new();
tom.SayHello();

// определение класса идет после инструкций верхнего уровня
class Person
{
    public void SayHello() => Console.WriteLine("Hello");
}

Таким образом, мы можем продолжать писать программы верхнего уровня без явного определения метода Main. Либо мы можем явным образом определить метод Main и класс Program:

И этот код будет выполняться аналогичным образом, как если бы мы не использовали класс Program и метод Main.

Проверь себя

📋 Тест по теме «Класс Program и метод Main. Программы верхнего уровня» Тест по теме

Практические задания

Лёгкое Ручная проверка Заполните пропуск в коде (1)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

// _____ https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (2)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

class Program
{
	static void _____(string[] args)
	{
		// See https://aka.ms/new-console-template for more information
		Console.WriteLine("Hello, World!");
	}
}
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (3)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

string hello = "Hello _____.COM";

Print(hello);

void Print(string message)
{
	Console.WriteLine(message);
}
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (4)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

class Program
{
	static void Main(string[] args)
	{
		string _____ = "Hello METANIT.COM";

		Print(hello);

		void Print(string message)
        {
			Console.WriteLine(message);
        }
	}
}
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (5)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

Person tom = new();
tom._____();

class Person
{ 
    public void SayHello() =>Console.WriteLine("Hello");
}
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (1)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

// See https://aka.ms/new-console-_____ for more information
Console.WriteLine("_____, World!");
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (2)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

class _____
{
	static void Main(string[] args)
	{
		// See https://aka.ms/new-_____-template for more information
		Console.WriteLine("Hello, World!");
	}
}
Войдите, чтобы отправить решение
Среднее Ручная проверка Расставьте строки кода в правильном порядке
+20 XP

Строки кода из примера этого урока перемешаны. Впишите их в правильном порядке, каждую строку — с новой строки.

	}
class Program
		Console.WriteLine("Hello, World!");
}
{
		// See https://aka.ms/new-console-template for more information
	{
	static void Main(string[] args)
Войдите, чтобы отправить решение
Сложное Ручная проверка Объясните и модифицируйте пример из урока «Класс Program и метод Main. Программы верхнего уровня»
+30 XP

Опишите своими словами, что делает приведённый пример кода из урока «Класс Program и метод Main. Программы верхнего уровня», и предложите одно осмысленное изменение (например, другое входное значение или дополнительное условие). Приведите итоговый код.

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
Войдите, чтобы отправить решение
Сложное Ручная проверка Найдите потенциальную проблему в коде урока «Класс Program и метод Main. Программы верхнего уровня»
+30 XP

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

class Program
{
	static void Main(string[] args)
	{
		// See https://aka.ms/new-console-template for more information
		Console.WriteLine("Hello, World!");
	}
}
Войдите, чтобы отправить решение
Мини-проект Ручная проверка Мини-проект по теме «Класс Program и метод Main. Программы верхнего уровня»
+50 XP

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

Войдите, чтобы отправить решение
Домашнее задание Ручная проверка Домашнее задание по теме «Класс Program и метод Main. Программы верхнего уровня»
+25 XP

Напишите собственную небольшую программу, применяющую материал темы «Класс Program и метод Main. Программы верхнего уровня». Используйте не менее одной конструкции, показанной в примерах урока. Прикрепите код решения и краткое описание того, что он делает.

Войдите, чтобы отправить решение

Обсуждение (0)

Войдите, чтобы оставить комментарий.