1. Общая структура C#-проекта
Ваша программа — это не просто один файл, а целая коллекция файлов, папок и настроек. C# — язык строго типизированный, для больших приложений важно держать всё в строгом порядке. Если вы будете игнорировать структуру проекта, ваш код быстро превратится в электронный лабиринт, где невозможно найти даже собственную строку вывода "Hello, World!".
Кроме того, понимание структуры проекта — это тот навык, который оценят на собеседованиях. Это как знать, где в доме лежат ключи и пульт от телевизора — гораздо проще жить!
Для наглядности представим, что наш C#-проект — это коробка с ячейками:
MyFirstConsoleApp/
├── MyFirstConsoleApp.csproj
├── Program.cs
├── Properties/
│ └── launchSettings.json
├── bin/
│ └── ... (сюда попадает скомпилированная программа)
├── obj/
│ └── ... (сюда складываются промежуточные файлы компиляции)
Детали структуры:
| Имя | Зачем нужно |
|---|---|
|
Файл проекта: «паспорт» всей вашей программы, здесь указаны все настройки проекта. |
|
Главный файл с точкой входа (Main). Именно сюда вы обычно пишете свой первый код. |
|
Папка с настройками проекта, например, способы запуска из IDE. |
|
«Корзина для готовых продуктов» — туда попадает собранный (скомпилированный) исполнительный файл. |
|
Внутренние рабочие файлы компиляции (как черновики при написании романа, вы туда редко заглядываете). |
2. Файл проекта (.csproj)
Файл с расширением .csproj — это сердце и мозг проекта. Именно здесь записаны все глобальные настройки: версия языка, зависимости, какие файлы нужно компилировать, какие пакеты подключены и т. д. Переключись в Solution Explorer на вкладку Files.
Пример файла для консольного приложения:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>
- <TargetFramework>net9.0</TargetFramework> — говорит, что проект заточен под .NET 9.
- <OutputType>Exe</OutputType> — значит, что получится исполняемый файл (.exe для Windows).
- В блоке <PropertyGroup> хранятся основные параметры.
- В этом файле вы можете добавлять дополнительные NuGet-пакеты, менять настройки компиляции, включать/выключать фичи.
3. Главный файл программы: Program.cs
Если сравнивать проект с театром, то Program.cs — это сцена, а все остальные файлы — закулисье. Именно здесь размещается так называемая "точка входа" приложения — метод Main.
// Program.cs
using System;
namespace MyFirstConsoleApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Привет, мир!");
}
}
}
- namespace — пространство имён, помогает группировать классы и избегать конфликта имён.
- class Program — основной класс, где располагается метод Main.
- static void Main(string[] args) — обязательная точка входа — отсюда начинает выполняться программа.
- Console.WriteLine() — уже знакомый вам способ сообщения миру о своих мыслях.
Обновляем наше приложение
Вспомним, что в прошлых лекциях мы уже делали мини-приложение, которое спрашивало имя пользователя и приветствовало его. Вот пример:
// Program.cs
using System;
namespace MyFirstConsoleApp
{
class Program
{
static void Main(string[] args)
{
Console.Write("Please enter your name: ");
string name = Console.ReadLine();
Console.WriteLine($"Welcome, {name}! Live long and prosper.");
}
}
}
Запустите проект: щёлкните зелёную кнопку ▶️ Run.
Если всё прошло успешно, внизу появится вкладка Run. Вы увидите, что программа запустилась и ждет вашего ответа на вопрос Please enter your name:. Напечатайте любое имя (например, "Cat") прямо в этой консоли и нажмите клавишу Enter.
Сразу после нажатия Enter программа обработает ваш ввод и выведет финальное сообщение с вашим именем. Программа завершила свою работу, и мы видим результат.
4. Как писать свой код: основные правила
Где писать код?
Основную логику поначалу лучше писать в файле Program.cs в методе Main. По мере роста приложения вы будете создавать новые файлы и классы, но пока не прыгайте выше головы — всё самое интересное происходит именно здесь.
Что можно (и что нельзя) делать в Main?
- Можно: объявлять переменные, писать вычисления, вызывать методы, выводить/считывать данные.
- Нельзя: писать код «вне» методов или классов (например, просто строку Console.WriteLine("Hello"); вне Main — так делать нельзя!).
Комментарии
Комментируйте код для себя и для других. Для однострочных комментариев используйте //, для многострочных — /* ... */. Чем проще потом догадаться, зачем вы написали этот загадочный кусок кода, тем лучше.
// Это однострочный комментарий
/*
А это —
многострочный.
*/
5. Как происходит выполнение программы?
Ваша программа всегда начинает выполнение с метода Main. Всё, что находится до этих строк, игнорируется. Хотите что-то сделать при запуске? Поместите это в Main.
Пример — упрощённая блок-схема (код → запуск):
Начало программы
|
v
Метод Main
|
v
Выполнение инструкций внутри Main (по порядку)
|
v
Конец программы
6. Как ваше приложение растёт: добавление новых файлов
Когда стоит создавать новый файл?
Когда ваш код перестаёт помещаться на одном экране, а переменные уже не держатся в голове, пришло время разбить код на части.
Пример: если вы делаете калькулятор, то можно сделать отдельный файл Calculator.cs и перенести туда отдельный класс.
MyFirstConsoleApp/
├── Program.cs
├── Calculator.cs // Новый файл с логикой калькулятора
Как добавить новый файл в Rider
- В дереве Solution Explorer кликните правой кнопкой по проекту → "Add" → "New File" (или "New Class").
- Дайте файлу осмысленное имя.
- Напишите в файле новый класс, или функцию.
// Calculator.cs
namespace MyFirstConsoleApp
{
class Calculator
{
public static int Add(int a, int b)
{
return a + b;
}
}
}
А теперь используем его из Program.cs:
// Program.cs
using System;
namespace MyFirstConsoleApp
{
class Program
{
static void Main(string[] args)
{
int sum = Calculator.Add(2, 3); //Используем функцию Add из класса Calculator
Console.WriteLine($"2 + 3 = {sum}");
}
}
}
7. "Сборка" и "Запуск" — что происходит под капотом?
Когда вы нажимаете Run (или F5), IDE:
- Проверяет синтаксис и собирает ваш код в бинарный файл (.exe или .dll) в папку bin/Debug/net9.0/ или bin/Release/net9.0/.
- Запускает собранный файл.
- Выводит результат в терминал/консоль, которую вы видите.
bin/ и obj/: зачем нужны эти папки?
- bin/ — тут лежит ваш готовый продукт (собранные программы).
- obj/ — тут хранятся временные файлы, которые нужны компилятору для промежуточных вычислений.
Обычно эти папки можно смело игнорировать, их содержимое автоматически пересоберётся при необходимости.
8. Частые ошибки при написании кода и работе с проектом
Писать код — это не бить по клавишам вслепую. Как только появляются ошибки вроде CS5001: Program does not contain a static 'Main' method suitable for an entry point, программисты начинают массово гуглить, а IDE ругается ещё более сложным языком.
- Одна из частых ошибок — код вне метода или класса. В C# нельзя просто взять и написать выражение прямо в файле программы. Всё должно быть внутри класса и метода!
- Разные имена файлов и классов. Так можно, но лучше давать файлам и классам одинаковые, понятные имена — для вашего (и вашего будущего коллеги) же удобства.
- Запутались в пространствах имён. Если вы создали класс в другом пространстве имён (namespace), не забудьте его подключить с помощью using.
- Забыли про точку входа. Если удалили или переименовали метод Main, программа не запустится.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ