1
Что на самом деле происходит, когда вы жмёте F5
~2 ч

Курс для программистов, которые C# «в целом знают», но на код-ревью и на собеседовании проваливаются на вопросах «почему так, а не иначе». Язык разбирается не как список конструкций, а как набор решений с ценой: значимые и ссылочные типы, память и сборщик мусора, равенство, null, сопоставление с образцом, строки и Span, обобщения, коллекции, LINQ, исключения, async и конкурентность, данные на границе процесса, рефлексия и генераторы кода. Затем пять юнитов на SOLID — каждый принцип как ответ на конкретную боль, а не как лозунг. Затем паттерны проектирования — порождающие, структурные, поведенческие и прикладные паттерны .NET — с обязательным разбором, когда паттерн вредит. Финал — тестируемость, разговор об архитектуре вслух и обзор нового в C# 13 и 14. Необязательная ветка «C# в приложении» доводит язык до работающего сервиса: хост и DI, Minimal API, HttpClient и фоновые задачи, EF Core, тесты, выпуск в Azure. Все примеры — в одной системе, бэкенде ENGAGE вымышленной компании Aldervane. C# 14 / .NET 10 LTS.
Материал и экзамен: русский · занятие ведёт ассистент
Ассистент берёт материал курса с нашего сервера и ведёт занятие на вашем языке.
Экзамен сдаётся на сайте, без ассистента. Вопросы экзамена не переводятся: так решено для всех курсов.
порядок свободный · ступени ниже — тот порядок, который предлагает автор, а не условиеВид: карта · ступени
1
Что на самом деле происходит, когда вы жмёте F5
~2 ч
2
Значимые и ссылочные типы: стек, куча и упаковка
~2 ч
по замыслу автора — после «Что на самом деле происходит, когда вы жмёте F5»
3
Память и время жизни: сборщик мусора, IDisposable, using
~2 ч
по замыслу автора — после «Значимые и ссылочные типы: стек, куча и упаковка»
4
class, struct, record: чем объявлять данные
~2 ч
по замыслу автора — после «Значимые и ссылочные типы: стек, куча и упаковка»
5
Равенство, хеш и сравнение: контракт, который легко нарушить
~2 ч
по замыслу автора — после «class, struct, record: чем объявлять данные»
6
null: nullable-типы, ссылочная нулевая аннотация и что с этим делать
~1,5 ч
по замыслу автора — после «class, struct, record: чем объявлять данные»
27
Сопоставление с образцом, кортежи, деконструкция
~2 ч
по замыслу автора — после любого из: «class, struct, record: чем объявлять данные», «null: nullable-типы, ссылочная нулевая аннотация и что с этим делать»
28
Span, Memory, ref struct и как мерить
~2 ч
по замыслу автора — после любого из: «Значимые и ссылочные типы: стек, куча и упаковка», «Строки: неизменяемость, интернирование, StringBuilder, Span»
7
Строки: неизменяемость, интернирование, StringBuilder, Span
~1,5 ч
по замыслу автора — после «Значимые и ссылочные типы: стек, куча и упаковка»
8
Инкапсуляция и конструирование: объект, который нельзя собрать неправильно
~2 ч
по замыслу автора — после «class, struct, record: чем объявлять данные»
9
Наследование и полиморфизм: virtual, override, new, sealed
~2 ч
по замыслу автора — после «Инкапсуляция и конструирование: объект, который нельзя собрать неправильно»
10
Интерфейсы: контракт, явная реализация, DIM
~1,5 ч
по замыслу автора — после «Наследование и полиморфизм: virtual, override, new, sealed»
11
Делегаты, лямбды, замыкания, события
~2 ч
по замыслу автора — после «Инкапсуляция и конструирование: объект, который нельзя собрать неправильно»
12
Обобщения: ограничения, реификация, вариантность
~2 ч
по замыслу автора — после «Интерфейсы: контракт, явная реализация, DIM»
31
Метаданные: рефлексия, атрибуты, генераторы кода
~2 ч
по замыслу автора — после любого из: «Что на самом деле происходит, когда вы жмёте F5», «Обобщения: ограничения, реификация, вариантность»
13
Коллекции: выбор структуры данных и её цена
~2 ч
по замыслу автора — после «Обобщения: ограничения, реификация, вариантность»
14
LINQ: отложенное выполнение, yield, IQueryable
~2 ч
по замыслу автора — после «Коллекции: выбор структуры данных и её цена»
15
Исключения: чем они являются и чем не являются
~2 ч
по замыслу автора — после «Инкапсуляция и конструирование: объект, который нельзя собрать неправильно»
30
Данные на границе: JSON, файлы и потоки, даты и время
~2 ч
по замыслу автора — после любого из: «Исключения: чем они являются и чем не являются», «async/await: что это и чего это не»
16
async/await: что это и чего это не
~2,5 ч
по замыслу автора — после «Делегаты, лямбды, замыкания, события»
29
Конкурентность: lock, Lock, Interlocked, SemaphoreSlim, Channel, Parallel
~2 ч
по замыслу автора — после «async/await: что это и чего это не»
17
SRP: одна причина для изменения
~2 ч
по замыслу автора — после «Интерфейсы: контракт, явная реализация, DIM»
18
OCP: открыт для расширения, закрыт для изменения
~2 ч
по замыслу автора — после «SRP: одна причина для изменения»
19
LSP: подтип обязан быть заменяемым
~2 ч
по замыслу автора — после «OCP: открыт для расширения, закрыт для изменения»
20
ISP: клиента не заставляют зависеть от лишнего
~1,5 ч
по замыслу автора — после «LSP: подтип обязан быть заменяемым»
21
~2,5 ч
по замыслу автора — после «ISP: клиента не заставляют зависеть от лишнего»
22
Порождающие паттерны: кто и как создаёт объекты
~2 ч
по замыслу автора — после «DIP и внедрение зависимостей»
23
Структурные паттерны: как собирать объекты в целое
~2 ч
по замыслу автора — после «DIP и внедрение зависимостей»
24
Поведенческие паттерны: кто кого вызывает и когда
~2 ч
по замыслу автора — после «DIP и внедрение зависимостей», «Делегаты, лямбды, замыкания, события»
25
Прикладные паттерны .NET: Repository, Options, CQRS, Result
~2 ч
по замыслу автора — после 2 из: «Порождающие паттерны: кто и как создаёт объекты», «Структурные паттерны: как собирать объекты в целое», «Поведенческие паттерны: кто кого вызывает и когда»
32
Что нового в C# 13 и 14 и как об этом спрашивают
~2 ч
по замыслу автора — после «Финал: тестируемость и разговор об архитектуре вслух»
26
Финал: тестируемость и разговор об архитектуре вслух
~2,5 ч
по замыслу автора — после «Прикладные паттерны .NET: Repository, Options, CQRS, Result», «async/await: что это и чего это не»
33 · C# в приложении
Хост, DI на практике, конфигурация, логирование
~2 ч
по замыслу автора — после «DIP и внедрение зависимостей»
34 · C# в приложении
Minimal API: конвейер, привязка, валидация, ошибки
~2 ч
по замыслу автора — после «Хост, DI на практике, конфигурация, логирование»
35 · C# в приложении
HttpClient, устойчивость и фоновые задачи
~2 ч
по замыслу автора — после «Хост, DI на практике, конфигурация, логирование», «async/await: что это и чего это не»
36 · C# в приложении
~2 ч
по замыслу автора — после «Хост, DI на практике, конфигурация, логирование», «LINQ: отложенное выполнение, yield, IQueryable»
37 · C# в приложении
Тесты сервиса: от модуля до HTTP
~2 ч
по замыслу автора — после «Хост, DI на практике, конфигурация, логирование», «Финал: тестируемость и разговор об архитектуре вслух»
38 · C# в приложении
Выпуск в Azure: App Service, секреты, managed identity
~2 ч
по замыслу автора — после «Minimal API: конвейер, привязка, валидация, ошибки»
финал · в браузере, без ассистента
Экзамен
закрыт · записаться на курс
| 1 | Что на самом деле происходит, когда вы жмёте F5 Описать путь от исходника до машинного кода: Roslyn → IL и метаданные → JIT (tier0 → tier1) → машинный код, и что меняют Debug и Release | ~2 ч |
| 2 | Значимые и ссылочные типы: стек, куча и упаковка Предсказывать поведение кода при присваивании и передаче в метод для значимых и ссылочных типов, включая структуры в коллекциях и кортежи | ~2 ч |
| 3 | Память и время жизни: сборщик мусора, IDisposable, using Объяснить поколенческую сборку и почему её цена определяется выжившими, а не мёртвыми объектами | ~2 ч |
| 4 | class, struct, record: чем объявлять данные Выбирать между class, struct, record class, record struct и readonly record struct по вопросу «значение или сущность», а не по привычке | ~2 ч |
| 5 | Равенство, хеш и сравнение: контракт, который легко нарушить Предсказывать, что сравнивает == и что сравнивает Equals, по статическому и настоящему типу | ~2 ч |
| 6 | null: nullable-типы, ссылочная нулевая аннотация и что с этим делать Различать Nullable<T> и nullable reference types: что делает компилятор, что делает рантайм (особая упаковка) и что не делает никто | ~1,5 ч |
| 7 | Сопоставление с образцом, кортежи, деконструкция Переписывать цепочки if/else с is и приведениями в switch-выражение и объяснять, почему порядок веток — часть смысла | ~2 ч |
| 8 | Span, Memory, ref struct и как мерить Объяснять, что такое Span<T> и ReadOnlySpan<T>, и предсказывать, где срез даёт окно, а где копию | ~2 ч |