Hello, World! на C#

Пишем первую программу «Привет, мир!» на C#, разбираем каждый элемент кода и изучаем современный синтаксис .NET 6+.

C# — объектно-ориентированный язык от Microsoft, который работает поверх платформы .NET. Программы на C# компилируются в байткод (IL) и выполняются средой выполнения CLR — схожая с Java идея: один код на всех ОС.

Классический Hello, World!

Традиционная запись, которую вы встретите в большинстве учебников:

using System;

namespace HelloWorld
{
    class Hello
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Привет, мир!");
        }
    }
}

Вывод:

Привет, мир!

Что означает каждая строка

Элемент

Смысл

using System;

подключает пространство имён System — в нём живёт класс Console

namespace HelloWorld

логический контейнер для организации кода проекта

class Hello

объявление класса; в C# весь код находится внутри классов

static void Main(string[] args)

точка входа — CLR начинает выполнение именно здесь

Console.WriteLine(...)

вывод строки с переводом строки в конце

Без using System; пришлось бы писать полное имя: System.Console.WriteLine(...). Директива using — просто сокращение.

Современная запись (.NET 6+)

Начиная с .NET 6 можно убрать весь «котёл»: пространства имён, класс и метод Main генерируются неявно. Это называется top-level statements:

Console.WriteLine("Привет, мир!");

Вывод:

Привет, мир!

Одна строка — полноценная программа. Компилятор сам «обернёт» её в нужную структуру. В новых проектах Visual Studio / .NET CLI именно такой шаблон создаётся по умолчанию.

Варианты вывода

Console.WriteLine("Строка с переносом");   // с \n в конце
Console.Write("Без переноса ");            // курсор остаётся на той же строке
Console.Write("продолжение");
Console.WriteLine();                       // просто перевод строки

Вывод:

Строка с переносом
Без переноса продолжение

Комментарии

// Однострочный комментарий — до конца строки

/*
   Многострочный комментарий:
   удобен для временного отключения блока кода.
*/

Console.WriteLine("Это выполнится"); // а это нет: /* Console.WriteLine("пропущено"); */

Вывод:

Это выполнится

Частые ловушки

  • Регистр имеет значение. console.writeline — ошибка; правильно Console.WriteLine.
  • Точка с запятой обязательна. Каждое выражение-оператор заканчивается ;.
  • Write vs WriteLine. Write не добавляет перевод строки — вывод следующего текста будет на той же строке.
  • Только один Main. В проекте может быть несколько классов с методом Main, но точка входа — один конкретный, указанный при сборке.

Коротко

  • Программы на C# запускаются на платформе .NET; точка входа — метод static void Main.
  • Console.WriteLine выводит строку с переносом; Console.Write — без переноса.
  • using System; сокращает запись: не нужно каждый раз писать System.Console.
  • В .NET 6+ достаточно одной строки Console.WriteLine("..."); — top-level statements.
  • C# чувствителен к регистру; каждый оператор заканчивается ;.
Проверьте себя
1. С какого метода начинается выполнение любой программы на C#?
AStart()
BRun()
CInit()
DMain()
2. Что выведет следующий код? System.Console.WriteLine("Hello");
ASystem.Hello
BConsole.Hello
CНичего — код содержит ошибку
DHello
3. Зачем нужна директива `using System;` в начале файла?
AЗапускает программу
BПозволяет использовать System.Console.WriteLine без префикса System
CОпределяет главный класс программы
DОбъявляет пространство имён программы
4. Что из перечисленного обязательно присутствует в любой программе на C#?
AДиректива using System
BОпределение пространства имён namespace
CОпределение класса с методом Main()
DКомментарий в начале файла

Закрепите практикой

Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.