Документация по C#
Узнайте, как написать любое приложение на языке программирования C# на платформе .NET.
Обучение программированию на C#
Начало работы
video
- Серия видео о C# для начинающих
- Канал о C# для начинающих
- Серия видео C# для пользователей среднего уровня
Учебник
- Руководства для самостоятельной работы
- Руководства в браузере
Ссылка
- C# на сайте Q&A
- Языки на форумах Tech Community по .NET
- C# на форуме Stack Overflow
- C# на форуме Discord
Основы C#
Общие сведения
- Обзор C#
- Структура программы C#
- Серия видео о C#
Концепция
- Система типов
- Объектно-ориентированное программирование
- Функциональные методики
- Исключения
- Стиль кода
Учебник
- Отображение командной строки
- Введение в классы
- Объектно-ориентированный язык C#
- Преобразование типов
- Сопоставление шаблонов
- Использование LINQ для обращения к данным
Основные понятия
Общие сведения
- Стратегия языка C#
- Основные понятия о программировании
Как работать в си шарп
Чтобы облегчить написание, а также тестирование и отладку программного кода нередко используют специальные среды разработки, в частности, Visual Studio. Рассмотрим создание приложений на C# с помощью бесплатной и полнофункциональной среды Visual Studio Community 2022, которую можно загрузить по следующему адресу: Microsoft Visual Studio 2022
После загрузки запустим программу установщика. В открывшемся окне нам будет предложено выбрать те компоненты, которые мы хотим установить вместе Visual Studio. Стоит отметить, что Visual Studio — очень функциональная среда разработки и позволяет разрабатывать приложения с помощью множества языков и платформ. В нашем случае нам будет интересовать прежде всего C# и .NET.
Чтобы добавить в Visual Studio поддержку проектов для C# и .NET, в программе установки среди рабочих нагрузок можно выбрать только пункт ASP.NET и разработка веб-приложений . Можно выбрать и больше опций или вообще все опции, однако стоит учитывать свободный размер на жестком диске — чем больше опций будет выбрано, соответственно тем больше места на диске будет занято.

И при инсталляции Visual Studio на ваш компьютер будут установлены все необходимые инструменты для разработки программ, в том числе фреймворк .NET.
После завершения установки создадим первую программу. Она будет простенькой. Вначале откроем Visual Studio. На стартовом экране выберем Create a new project (Создать новый проект)

На следующем окне в качестве типа проекта выберем Console App , то есть мы будем создавать консольное приложение на языке C#

Чтобы проще было найти нужный тип проекта, в поле языков можно выбрать C# , а в поле типа проектов — Console .
Далее на следующем этапе нам будет предложено указать имя проекта и каталог, где будет располагаться проект.

В поле Project Name дадим проекту какое-либо название. В моем случае это HelloApp .
На следующем окне Visual Studio предложит нам выбрать версию .NET, которая будет использоваться для проекта. Выберем последнюю на данный момент верси. — .NET 8.0:

Нажмен на кнопку Create (Создать) для создания проекта, и после этого Visual Studio создаст и откроет нам проект:

В большом поле в центре, которое по сути представляет текстовый редактор, находится сгенерированный по умолчанию код C#. Впоследствии мы изменим его на свой.
Справа находится окно Solution Explorer, в котором можно увидеть структуру нашего проекта. В данном случае у нас сгенерированная по умолчанию структура: узел Dependencies — это узел содержит сборки dll, которые добавлены в проект по умолчанию. Эти сборки как раз содержат классы библиотеки .NET, которые будет использовать C#. Однако не всегда все сборки нужны. Ненужные потом можно удалить, в то же время если понадобится добавить какую-нибудь нужную библиотеку, то именно в этот узел она будет добавляться.
Далее идет непосредственно сам файл кода программы Program.cs , который по умолчанию открыт в центральном окне и который имеет всего две строки:
// See https://aka.ms/new-console-template for more information Console.WriteLine("Hello, World!");
Первая строка предваряется символами // и представляет комментарии — пояснения к коду.
Вторая строка собственно представляет собой код программы: Console.WriteLine(«Hello World!»); . Эта строка выводит на консоль строку «Hello World!».
Несмотря на то, что программа содержит только одну строку кода, это уже некоторая программа, которую мы можем запустить. Запустить проект мы можем с помощью клавиши F5 или с панели инструментов, нажав на зеленую стрелку. И если вы все сделали правильно, то при запуске приложения на консоль будет выведена строка «Hello World!».

Теперь изменим весь этот код на следующий:
Console.Write("Введите свое имя: "); var name = Console.ReadLine(); // вводим имя Console.WriteLine($"Привет "); // выводим имя на консоль
По сравнению с автоматически сгенерированным кодом я внес несколько изменений. Теперь первой строкой выводится приглашение к вводу.
Console.Write("Введите свое имя: ");
Метод Console.Write() выводит на консоль некоторую строку. В данном случае это строка «Введите свое имя: «.
На второй строке определяется строковая переменная name, в которую пользователь вводит информацию с консоли:
var name = Console.ReadLine();
Ключевое слово var указывает на определение переменной. В данном случае переменная называется name . И ей присваивается результат метода Console.ReadLine() , который позволяет считать с консоли введенную строку. То есть мы введем в консоли строку (точнее имя), и эта строка окажется в переменой name .
Затем введенное имя выводится на консоль:
Console.WriteLine($"Привет ");
Чтобы ввести значение переменной name внутрь выводимой на консоль строки, применяются фигурные скобки <>. То есть при выводе строки на консоль выражение будет заменяться на значение переменной name — введенное имя.
Однако чтобы можно было вводить таким образом значения переменных внутрь строки, перед строкой указывается знак доллара $.
Теперь протестируем проект, запустив его на выполнение, также нажав на F5 или зеленую стрелочку.

Скомпилированное приложение можно найти в папке проекта в каталоге bin\Debug\net8.0 . Оно будет называться по имени проекта и иметь расширение exe. И затем этот файл можно будет запускать без Visual Studio, а также переносить его на другие компьютеры, где установлен .NET 8.
Научитесь программированию в Unity
Хотите программировать собственные компьютерные игры? Начните с бесплатных наборов и обучающих материалов по программированию на Unity Learn, а также не забывайте про наше замечательное сообщество.

Unity FPS Microgame
Программируйте игры с Unity
Новички могут загрузить Unity бесплатно и начать с готовых ресурсов Unity Microgame и Mod. Затем углубите знания с помощью обучающих материалов и изучите структуру C#, языка программирования игр в Unity. Научитесь разрабатывать простые скрипты на C# для программирования игрового процесса, механики, визуальных эффектов, систем ИИ и других элементов.

Создавайте красивые игры
Реализуйте свои способности к программированию в Unity! Это может стать началом вашей успешной карьеры. Unity — самая популярная платформа разработки игр в мире: 50% всех мобильных игр созданы в Unity! Профессия Unity-разработчика находится в первой десятке по росту востребованности в США согласно данным LinkedIn.

Introduction to C# scripting in Unity
Что такое C#?
Скрипты в Unity разрабатываются на языке C# (произносится как «си-шарп»), который имеет богатые возможности и прост в изучении. Предлагаем вашему вниманию простое и понятное введение в программировании на C# в Unity, которое также включает информацию о базовом синтаксисе языка, то есть о переменных, функциях и классах.

Unity Creator Kit: Code
Создайте свой первый скрипт в Unity
Наборы Creator Kit — это простые игровые проекты, доступные на Unity Learn. Каждый из них можно изучить и освоить за несколько часов В наборе Creator Kit для начинающих программистов вы познакомитесь с основами разработки скриптов на C# для Unity в контексте игры жанра экшен-RPG.

Create with Code course from Unity
Полный курс: Create with Code in Unity
Create with Code — это официальный вводный курс Unity по программированию, содержащий более 37 часов насыщенного образовательного контента. В процессе разработки прототипа, решения задач по программированию и ответов на вопросы вы освоите базовые принципы программирования на примере разработки собственного игрового проекта на C# с нуля.
Другие способы учиться программированию в Unity

Обучающие материалы по программированию на C# в Unity
У нас есть масштабная коллекция коротких уроков, где рассматриваются основы программирования на C# в Unity. Начните с материалов для начинающих, а затем переходите к коллекции для опытных пользователей.
Как дурак C# учил. Часть 1

Я решил записывать. Главным образом потому, что я люблю записывать. Хотя нет. На самом деле мне хочется рассказать историю. Историю о том, что программирование это интересно. О том, что программирование может быть не только, профессией, но и отличным хобби, как фотография, шахматы, живопись или игра на гитаре. О том, что не обязательно иметь врожденный талант, суперсилу или годы специального образования чтобы добиться маленьких, но больших побед в любом деле.
Это дневник человека, изучающего программирование для удовольствия. Не для профессии, не для заработка. Я не живу в Нигерии с кнопочным телефоном и не нахожусь в отчаянном положении. Я просто учусь и программирую для развлечения в свободное от работы и семейных дел время. Шоу в реальном времени. Публикуется пачками по 5 записей.
Отчего-то сложившийся менталитет (мой и окружающих) как бы защищает нас от смелых экспериментов с чем-то новым. «Я не умею» — звучит как чёртов смертный приговор. Я каждый день вижу это на работе, когда коллеги сталкиваются с незнакомой задачей. Я не умею. Конец программы.
Мой семилетний сын боится пробовать незнакомые занятия. Потому что не умеет. А надо понимать, что в свои годы он не умеет очень многого.
Иногда я говорю ему “Приятель, если бы люди делали только то, что умеют, мы бы до сих пор жили в пещерах, а конкретно ты целыми днями мычал, ползал и какал в штаны, вместо игры в Angry Birds. Хотя нет, ты бы ползал без штанов, потому что никто не умел бы шить”.
К чему это я? К тому что я совершенно не умею программировать. Но собираюсь научиться. Не потому, что хочу стать разработчиком — профессия у меня уже есть. А потому что могу. Хотя вообще-то у меня есть целых три причины.
Первая — размять мозг. Я убежден, что нельзя строить жизнь вокруг какой-то одной деятельности. Надо занимать свой ум разными задачами. И чем они будут разнообразнее — тем для ума лучше.
Вторая причина — практическая. Я собираюсь написать игру (банально, да), в которую мы с мелким будем играть и веселиться.У нас уже есть идея — в прошлой итерации мы пробовали сделать настолку, но механика оказалась слишком сложна.
Третья причина — образовательная. Я попробую изменить отношение общества к программированию. Принято считать, что программирование — удел профессионалов. Никто не занимается программированием в качестве хобби. Такого понятия, как “любительское программирование” (запомните это слово) его вообще не существует.
Часть читающих меня профи сейчас набросится с комментариями о том, что я обесцениваю их профессию и наработанные годами скиллы. Не спешите. Пока просто поверьте мне, что это не так, а мы к этой теме еще потом вернемся.
Короче, я решил учить C#. Потому что для моей идеи нужен движок, и я так понял, что лучше всего Unity. А Unity — это C#. Это первое.
Второе, что я понял — начинать с Unity рановато. Почти все обучающие материалы исходят из того, что читатель уже знаком с языком. А всё, что я знаю про C# — это то, что правильно говорить «Си Шарп», а не «Цэ с решёткой». Так что начнём с самого языка.
Третье, что я понял — обучение будет основательным. Поскольку шарп для меня новый язык, нужно что-то “для чайников”, а такого нет.
Есть учебник “C# для школьников” Мартина Дрейера, но читать его решительно невозможно. Во-первых, знакомство с программированием у него начинается с изучения классов и объектов. Слишком сложно и непонятно. Во-вторых, на один абзац сути приходится три страницы примеров из реального мира. Слишком много. Я не готов тратить столько времени на историю о том, как девочка на необитаемом острове убеждает робота-инопланетянина заставить слона сорвать кокос.
Есть другая крайность. Уроки с сайта mycsharp.ru и “Полное руководство по языку программирования С# 8.0 и платформе .NET Core 3” на metanit.com/sharp/tutorial
Тут есть примеры кода, из которых можно что-то переиспользовать, но примеры слишком абстрактные типа “Давайте напишем программу, которая помещает в память объекты a, b и c, это же так увлекательно!”. Но это чуть лучше, чем слоны и кокосы, тем более, что у меня есть своя методика обучения.
В общем, я решил, что справлюсь и отправляюсь устанавливать Visual Studio.
Запись 2
Всё пошло не по плану. На следующий день, я словил Чёрный экран. Так и не понял, что это было, но похоже, что видеодрайвер обновился вперёд Windows и оказался несовместим со старой версией.
Когда-то я был аккуратен в подобных вещах. При любых проблемах просто восстанавливал раздел с ОС из бережно приготовленного образа, но это было давно. Винда стала стабильнее, я стал беспечнее. И вот.
Я провел неделю в попытках всё поправить. Перепробовал все рецепты. Нашел способ запустить командную строку, добыл древний Far, перенёс файлы, с третьей попытки подобрал подходящую сборку (я пользуюсь кастомизированной виндой) с уже установленным проблемным обновлением.
Тут надо сказать пару слов о моем бэкграунде. Я не умею программировать, но в общем-то считаю себя достаточно компьютерным человеком. Лет в 8 у нас дома появился первый в моей жизни ПК. Packard Bell 486. Крутой по тем временам. На нём было две программы — Лексикон и Инфо-бухгалтер.

Я играл в Лексикон.
Из символов I, / и \ я рисовал гоночную трассу, а курсор был машиной. Такие вот прибитые к полу игрушки. Ни интернета, ни друзей с компьютерами (поначалу). Я развлекался, как мог.
Кроме двух программ к компу прилагался полноценный MS-DOS на стопке дискет и я часто экспериментировал с разными командами. Дошёл и до такой, которая называлась QBASIC.
В бэйсике был небольшой мануал, и я кое-что понял. Выучил одну или две команды, и смог писать программы, которые выводили на экран какие-нибудь буквы. Было круто.
Кроме того в старших классах были уроки информатики. Turbo Pascal. Нас учили писать настоящий код. Разумеется, в тетрадях. Но у меня был компьютер (уже какой-то Пентиум) и я мог практиковаться.
Так я познакомился с самыми элементарными вещами. Конструкциями if-then-else и циклами. Вершиной моего мастерства стала программа «Рулетка». Рулетка была игрой. Ты выбираешь число от 0 до 10 и делаешь ставку. Угадал — бонус, нет — потеря ставки. И так, пока не кончатся деньги. Я очень гордился.
Тем не менее, я был полным гуманитарием и не стал связывать свою жизнь с информатикой. Так что после школьных экспериментов я не вспоминал о программировании примерно 19 лет.
О! Кажется, установка Visual Studio завершена. Какая красивенькая. Чёрненькая вся. Давайте разбираться, что тут к чему.
Запись 3
Вообще-то это не первая моя попытка программирования. Где-то год назад на меня уже находила блажь, и я пробовал VBA. Смог освоить синтаксис нескольких команд и написал такую же рулетку, как тогда в школе. Только лучше. Теперь у меня был графический интерфейс из полей и кнопок, а также функции сохранения и загрузки игры (данные хранились в excel-таблицах).
Тем не менее я довольно быстро это дело бросил. По большей части от невозможности нормально использовать изображения, а может ещё и от лени. Не помню точно. В любом случае будем считать мой VBA-опыт своего рода разминкой. Теперь же пришло время настоящего хардкора.
За шарпом я провёл 4-5 вечеров. Прочитал две главы из учебника. Что я могу сказать? Меня совершенно не вдохновляет академический подход, основанный на написании бессмысленных программ, делающих абстрактрые вычисления. Не уверен, что смогу гордиться приложением, которое считает площадь треугольника.
Так что я придумал свой учебный план. С блэкджеком и… ну почти. Я выучил несколько самых важных команд: Console.WriteLine для вывода надписей, Console.Readline для ввода с клавиатуры, арифметические операции, условную конструкцию if-else, цикл while и конечно же Random для случайных чисел.
Наверное, вы уже догадались. Я снова написал консольную рулетку 🙂

Ощущения — восторг. Она работает! В ней можно проиграть или выиграть! И это настоящая программа — в ней 68 строк непонятного кода, в том числе целых 5 вызываемых методов.
Сложно ли было? Да. Я читал мануалы, допускал ошибки и всё ломал, тратил часы на поиск дефектов, снова читал мануалы, путался в коде и несколько раз всё переписывал, упрощая конструкции в циклах и убирая лишние переменные.
Но результат того стоил. Я полон надежд и двигаюсь дальше.
Запись 4
Первое препятствие. Дошел до понятия классов и объектов. Понятие совершенно непонятно. Как бы сама идея ясна, но как и для чего её применить? Создать классы для игрока, казино и рулетки? Потом придумывать объекты в них? И что они будут делать? Слишком притянуто. Кажется чем-то неестественным и только запутывает программу.
Дошло до меня через несколько дней. Я гулял с сыном на детской площадке и смотрел на мир вокруг объектно-ориентированными глазами.
class Парк , class Ребёнок Ребёнок Дима = new Ребёнок (); Ребёнок Саша = new Ребёнок ();
И тут я всё понял. Моя программа-рулетка слишком тупая и примитивная. Там просто не нужны классы. Это было хорошее упражнение для освоения процедурного программирования, но не более того.
Надо было придумать новое упражнение, чтобы понять классы. И я придумал. Прямо вот сел на лавочке и на телефоне написал себе задачку. Сделать мини-RPG. Там будет герой со своими параметрами силы и здоровья. Каждый ход он будет заходит в новую пещеру и встречать там тролля со своими параметрами. Они будут сражаться, бросая кубик, как в Невервинтере. А еще там можно будет найти оружие и доспехи.
Основные классы напросились сами собой:
- Герой (сила, здоровье, деньги)
- Предмет (урон, броня, прочность)
- Монстр (сила, здоровье)
Запись 5
Легко не получилось. Я достаточно быстро набросал классы с полями. Выяснил из учебника, что такое конструктор и запилил конструкторы брони и оружия. Сделал интерфейс, попутно разобравшись, как менять цвет текста.
Теперь у меня на экран выводится приветствие, статы игрока, оружия и брони. Есть меню, из которого можно запустить следующий ход или выйти из игры.

И даже это не было просто. Я постоянно натыкался на ошибки. Особенное при переносе кода в методы. Какая-то фигня не существует в каком-то контексте. Другая фигня недоступна из-за уровня защиты…
Мне очень не хватало какого-то руководства для чайников по структурированию кода. Куда поместить метод для генерации предмета? В класс Item? В класс Program? Просто оставить в коде? Приходится экспериментировать, ловить и исправлять ошибки.
Отдельные два дня я мучался с генератором случайных чисел, который выдавал мне щит и меч с одинаковыми параметрами. Понял, что нормальные решения моему разуму пока недоступны и сделал паузу в одну секунду между двумя генерациями.
Дальше эйфория кончилась и начался ступор. Я сумел сгенерировать два предмета, вручную, присвоив им названия Weapon1 и Armor1. Но мне потребуется делать это после каждого хода, копить их в инвентаре, менять… Как сделать создание объектов программно? Как генерировать их названия и тем более выбирать нужные для изменения их параметров?
С VBA было проще. В интернете полно примеров скриптов под каждую частную задачу. Найти и переиспользовать нужный — не проблема. Очень часто я вообще не понимал, половину написанного кода, но он волшебным образом работал, а тут приходится разбираться.
Учебник не помогает. Там уже рассказывают про лямбда-выражения и многопоточность, а примеры до сих пор на уровне “Найти сумму всех четных чисел в ряде чисел”. Скукота. Поиск в интернете тоже не даёт ответов, потому что я как-то не так формулирую вопрос.
Подозреваю, что надо подключать базу данных и записывать объекты туда. Придётся мне учить SQL.
- любительское программирование
- с#
- Программирование
- .NET
- Изучение языков
