Main и top-level statements — точка входа в .NET
CLR запускает программу с точки входа. В консольном приложении это метод Main или top-level statements в Program.cs. В class library точки входа нет — сборку подключают другие проекты.
См. также: C# — язык платформы .NET · Python — if name == "main".
Top-level statements (.NET 6+)
Шаблон dotnet new console создаёт короткий Program.cs:
Console.WriteLine("Приложение запущено");
Компилятор генерирует скрытый класс Program с методом Main. Это современный эквивалент «кода запуска» без лишней обёртки.
Аргументы командной строки доступны через неявный массив args (если он объявлен в файле):
foreach (var arg in args)
Console.WriteLine(arg);
Классический static void Main
По-прежнему допустим и нужен в учебниках и legacy-коде:
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello");
}
}
| Элемент | Назначение |
|---|---|
static | CLR вызывает метод без экземпляра |
void | Не возвращает значение (код выхода — Environment.Exit или return int в других сигнатурах) |
string[] args | Аргументы командной строки |
Библиотека vs исполняемый файл
Тип проекта задаётся в .csproj:
<OutputType>Exe</OutputType> <!-- консольное приложение -->
<OutputType>Library</OutputType> <!-- DLL для ссылок -->
| Тип | Точка входа | Запуск |
|---|---|---|
| Exe / консоль | Main или top-level | dotnet run, двойной клик по .exe |
| Library | Нет | Только через ссылку из другого проекта |
| ASP.NET Core | Сгенерированный Main + хост Kestrel | dotnet run на веб-проекте |
Импорт namespace из DLL не запускает Main — поведение ближе к Java, чем к Python с кодом верхнего уровня.
Аналог Python __main__
В Python один .py может быть и модулем, и скриптом — проверка __name__. В C# роли обычно разделены проектами:
- Class library — функции, классы, сервисы (без
Main). - Console / Web —
Program.csс запуском.
Демо-код в библиотеке держат в тестах (xUnit, NUnit) или в отдельном консольном проекте, а не в public static инициализаторах.
StartupObject и несколько Main
Если в сборке несколько классов с Main, в .csproj указывают:
<StartupObject>MyApp.Program</StartupObject>
Иначе компилятор сообщит об неоднозначности.
Когда что использовать
| Задача | Подход |
|---|---|
| Учебный консольный пример | Top-level statements |
| Unity / WPF / большой legacy | Явный Main или сгенерированный шаблон |
| Переиспользуемая логика | Class library + ссылка из exe |
| Веб API | WebApplication.CreateBuilder в Program.cs |
Блок if name == "main" в одном файле ≈ отдельный exe-проект с Program.cs. Общая логика ≈ class library без точки входа.
Дальше по разделу
| Тема | Статья |
|---|---|
Проекты, dotnet run | 1 — C# и .NET |
| ASP.NET точка входа | 451 — ASP.NET |
| Структура решения | раздел .NET platform |
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). C# как язык платформы .NET - устройство проекта, роль `.cs`-файлов и базовые принципы организации кода. C# — это современный, типизированный язык программирования общего назначения, разработанный корпорацией Microsoft. Справочник-шпаргалка по конфигурациям в C — типы, синтаксис, стандартная библиотека, типовые паттерны. Не заменяет пошаговое обучение. Учебный курс — раздел. Набор советов, правил, принципов и обычаев в разработке на этом языке. Кавычки, точки, запятые, скобки и прочие знаки препинания. Ключевые слова C# - назначение базовых конструкций языка и примеры их применения в типичном коде. Набор функций, которые включены в стандартную библиотеку языка. Пространства имён в C# - организация модулей, `file-scoped namespace` и поддержание чистой структуры кода. манипулировать данными (арифметические, логические, сравнительные операторы). Самый базовый способ ветвления — оператор if. Он проверяет условие и, если оно истинно (true), выполняет блок кода. Обработка исключений в C# - типы исключений, `try/catch/finally` и практики надежного кода. Платформо-зависимые исключения — например, PlatformNotSupportedException используется в кроссплатформенных API, когда функция недоступна на текущей ОС.C# - язык программирования платформы .NET
Что требуется знать перед началом изучения языка программирования C#
Справочник по конфигурациям в C#
Рекомендации по разработке на C#
Синтаксис и пунктуация в C#
Ключевые слова языка C#
Встроенные функции и методы C#
Пространства имён в C#
Управляющие конструкции и логические операторы
Условные выражения и ветвления
Обработка исключений в C#
Иерархия классов исключений в C#