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

For developers who "know C#" but stall at code review and in interviews when asked why something is built the way it is. The language is taught not as a list of constructs but as a set of decisions with a price: value and reference types, memory and the garbage collector, equality, null, pattern matching, strings and Span, generics, collections, LINQ, exceptions, async and concurrency, data at the process boundary, reflection and source generators. Five units then take SOLID one principle at a time, each as the answer to a concrete pain rather than a slogan. Design patterns follow — creational, structural, behavioural and the applied .NET ones — always including the case where the pattern hurts. The course closes on testability, talking through an architecture decision out loud, and what is new in C# 13 and 14. An optional branch, "C# in an application", takes the language into a working service: the host and DI, Minimal APIs, HttpClient and background jobs, EF Core, tests, and deployment to Azure. Every example lives in one system, the ENGAGE backend of the fictional firm Aldervane. Targets C# 14 / .NET 10 LTS. Written in Russian.
the order is free · the steps below are the order the author suggests, not a conditionView: map · steps
1
Что на самом деле происходит, когда вы жмёте F5
~2 h
2
Значимые и ссылочные типы: стек, куча и упаковка
~2 h
by the author’s design, after “Что на самом деле происходит, когда вы жмёте F5”
3
Память и время жизни: сборщик мусора, IDisposable, using
~2 h
by the author’s design, after “Значимые и ссылочные типы: стек, куча и упаковка”
4
class, struct, record: чем объявлять данные
~2 h
by the author’s design, after “Значимые и ссылочные типы: стек, куча и упаковка”
5
Равенство, хеш и сравнение: контракт, который легко нарушить
~2 h
by the author’s design, after “class, struct, record: чем объявлять данные”
6
null: nullable-типы, ссылочная нулевая аннотация и что с этим делать
~1.5 h
by the author’s design, after “class, struct, record: чем объявлять данные”
27
Сопоставление с образцом, кортежи, деконструкция
~2 h
by the author’s design, after any one of these: “class, struct, record: чем объявлять данные”, “null: nullable-типы, ссылочная нулевая аннотация и что с этим делать”
28
Span, Memory, ref struct и как мерить
~2 h
by the author’s design, after any one of these: “Значимые и ссылочные типы: стек, куча и упаковка”, “Строки: неизменяемость, интернирование, StringBuilder, Span”
7
Строки: неизменяемость, интернирование, StringBuilder, Span
~1.5 h
by the author’s design, after “Значимые и ссылочные типы: стек, куча и упаковка”
8
Инкапсуляция и конструирование: объект, который нельзя собрать неправильно
~2 h
by the author’s design, after “class, struct, record: чем объявлять данные”
9
Наследование и полиморфизм: virtual, override, new, sealed
~2 h
by the author’s design, after “Инкапсуляция и конструирование: объект, который нельзя собрать неправильно”
10
Интерфейсы: контракт, явная реализация, DIM
~1.5 h
by the author’s design, after “Наследование и полиморфизм: virtual, override, new, sealed”
11
Делегаты, лямбды, замыкания, события
~2 h
by the author’s design, after “Инкапсуляция и конструирование: объект, который нельзя собрать неправильно”
12
Обобщения: ограничения, реификация, вариантность
~2 h
by the author’s design, after “Интерфейсы: контракт, явная реализация, DIM”
31
Метаданные: рефлексия, атрибуты, генераторы кода
~2 h
by the author’s design, after any one of these: “Что на самом деле происходит, когда вы жмёте F5”, “Обобщения: ограничения, реификация, вариантность”
13
Коллекции: выбор структуры данных и её цена
~2 h
by the author’s design, after “Обобщения: ограничения, реификация, вариантность”
14
LINQ: отложенное выполнение, yield, IQueryable
~2 h
by the author’s design, after “Коллекции: выбор структуры данных и её цена”
15
Исключения: чем они являются и чем не являются
~2 h
by the author’s design, after “Инкапсуляция и конструирование: объект, который нельзя собрать неправильно”
30
Данные на границе: JSON, файлы и потоки, даты и время
~2 h
by the author’s design, after any one of these: “Исключения: чем они являются и чем не являются”, “async/await: что это и чего это не”
16
async/await: что это и чего это не
~2.5 h
by the author’s design, after “Делегаты, лямбды, замыкания, события”
29
Конкурентность: lock, Lock, Interlocked, SemaphoreSlim, Channel, Parallel
~2 h
by the author’s design, after “async/await: что это и чего это не”
17
SRP: одна причина для изменения
~2 h
by the author’s design, after “Интерфейсы: контракт, явная реализация, DIM”
18
OCP: открыт для расширения, закрыт для изменения
~2 h
by the author’s design, after “SRP: одна причина для изменения”
19
LSP: подтип обязан быть заменяемым
~2 h
by the author’s design, after “OCP: открыт для расширения, закрыт для изменения”
20
ISP: клиента не заставляют зависеть от лишнего
~1.5 h
by the author’s design, after “LSP: подтип обязан быть заменяемым”
21
~2.5 h
by the author’s design, after “ISP: клиента не заставляют зависеть от лишнего”
22
Порождающие паттерны: кто и как создаёт объекты
~2 h
by the author’s design, after “DIP и внедрение зависимостей”
23
Структурные паттерны: как собирать объекты в целое
~2 h
by the author’s design, after “DIP и внедрение зависимостей”
24
Поведенческие паттерны: кто кого вызывает и когда
~2 h
by the author’s design, after “DIP и внедрение зависимостей”, “Делегаты, лямбды, замыкания, события”
25
Прикладные паттерны .NET: Repository, Options, CQRS, Result
~2 h
by the author’s design, after 2 of these: “Порождающие паттерны: кто и как создаёт объекты”, “Структурные паттерны: как собирать объекты в целое”, “Поведенческие паттерны: кто кого вызывает и когда”
32
Что нового в C# 13 и 14 и как об этом спрашивают
~2 h
by the author’s design, after “Финал: тестируемость и разговор об архитектуре вслух”
26
Финал: тестируемость и разговор об архитектуре вслух
~2.5 h
by the author’s design, after “Прикладные паттерны .NET: Repository, Options, CQRS, Result”, “async/await: что это и чего это не”
33 · C# в приложении
Хост, DI на практике, конфигурация, логирование
~2 h
by the author’s design, after “DIP и внедрение зависимостей”
34 · C# в приложении
Minimal API: конвейер, привязка, валидация, ошибки
~2 h
by the author’s design, after “Хост, DI на практике, конфигурация, логирование”
35 · C# в приложении
HttpClient, устойчивость и фоновые задачи
~2 h
by the author’s design, after “Хост, DI на практике, конфигурация, логирование”, “async/await: что это и чего это не”
36 · C# в приложении
~2 h
by the author’s design, after “Хост, DI на практике, конфигурация, логирование”, “LINQ: отложенное выполнение, yield, IQueryable”
37 · C# в приложении
Тесты сервиса: от модуля до HTTP
~2 h
by the author’s design, after “Хост, DI на практике, конфигурация, логирование”, “Финал: тестируемость и разговор об архитектуре вслух”
38 · C# в приложении
Выпуск в Azure: App Service, секреты, managed identity
~2 h
by the author’s design, after “Minimal API: конвейер, привязка, валидация, ошибки”
final · in the browser, without the assistant
Exam
closed · enrol on the course
| 1 | Что на самом деле происходит, когда вы жмёте F5 Описать путь от исходника до машинного кода: Roslyn → IL и метаданные → JIT (tier0 → tier1) → машинный код, и что меняют Debug и Release | ~2 h |
| 2 | Значимые и ссылочные типы: стек, куча и упаковка Предсказывать поведение кода при присваивании и передаче в метод для значимых и ссылочных типов, включая структуры в коллекциях и кортежи | ~2 h |
| 3 | Память и время жизни: сборщик мусора, IDisposable, using Объяснить поколенческую сборку и почему её цена определяется выжившими, а не мёртвыми объектами | ~2 h |
| 4 | class, struct, record: чем объявлять данные Выбирать между class, struct, record class, record struct и readonly record struct по вопросу «значение или сущность», а не по привычке | ~2 h |
| 5 | Равенство, хеш и сравнение: контракт, который легко нарушить Предсказывать, что сравнивает == и что сравнивает Equals, по статическому и настоящему типу | ~2 h |
| 6 | null: nullable-типы, ссылочная нулевая аннотация и что с этим делать Различать Nullable<T> и nullable reference types: что делает компилятор, что делает рантайм (особая упаковка) и что не делает никто | ~1.5 h |
| 7 | Сопоставление с образцом, кортежи, деконструкция Переписывать цепочки if/else с is и приведениями в switch-выражение и объяснять, почему порядок веток — часть смысла | ~2 h |
| 8 | Span, Memory, ref struct и как мерить Объяснять, что такое Span<T> и ReadOnlySpan<T>, и предсказывать, где срез даёт окно, а где копию | ~2 h |