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

Курс для программистов, которые 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.
Votre leçon est dans votre langue : c’est votre assistant qui la mène.
Votre assistant récupère le contenu du cours sur notre serveur et mène la leçon dans votre langue.
L’examen se passe sur le site, sans assistant. Les questions d’examen ne sont pas traduites : c’est la règle pour tous les cours.
l’ordre est libre · les étapes ci-dessous sont l’ordre suggéré par l’auteur, pas une conditionAffichage: carte · niveaux
1
Что на самом деле происходит, когда вы жмёте F5
~2 h
2
Значимые и ссылочные типы: стек, куча и упаковка
~2 h
selon le plan de l’auteur, après « Что на самом деле происходит, когда вы жмёте F5 »
3
Память и время жизни: сборщик мусора, IDisposable, using
~2 h
selon le plan de l’auteur, après « Значимые и ссылочные типы: стек, куча и упаковка »
4
class, struct, record: чем объявлять данные
~2 h
selon le plan de l’auteur, après « Значимые и ссылочные типы: стек, куча и упаковка »
5
Равенство, хеш и сравнение: контракт, который легко нарушить
~2 h
selon le plan de l’auteur, après « class, struct, record: чем объявлять данные »
6
null: nullable-типы, ссылочная нулевая аннотация и что с этим делать
~1,5 h
selon le plan de l’auteur, après « class, struct, record: чем объявлять данные »
27
Сопоставление с образцом, кортежи, деконструкция
~2 h
selon le plan de l’auteur, après l’une de celles-ci : « class, struct, record: чем объявлять данные », « null: nullable-типы, ссылочная нулевая аннотация и что с этим делать »
28
Span, Memory, ref struct и как мерить
~2 h
selon le plan de l’auteur, après l’une de celles-ci : « Значимые и ссылочные типы: стек, куча и упаковка », « Строки: неизменяемость, интернирование, StringBuilder, Span »
7
Строки: неизменяемость, интернирование, StringBuilder, Span
~1,5 h
selon le plan de l’auteur, après « Значимые и ссылочные типы: стек, куча и упаковка »
8
Инкапсуляция и конструирование: объект, который нельзя собрать неправильно
~2 h
selon le plan de l’auteur, après « class, struct, record: чем объявлять данные »
9
Наследование и полиморфизм: virtual, override, new, sealed
~2 h
selon le plan de l’auteur, après « Инкапсуляция и конструирование: объект, который нельзя собрать неправильно »
10
Интерфейсы: контракт, явная реализация, DIM
~1,5 h
selon le plan de l’auteur, après « Наследование и полиморфизм: virtual, override, new, sealed »
11
Делегаты, лямбды, замыкания, события
~2 h
selon le plan de l’auteur, après « Инкапсуляция и конструирование: объект, который нельзя собрать неправильно »
12
Обобщения: ограничения, реификация, вариантность
~2 h
selon le plan de l’auteur, après « Интерфейсы: контракт, явная реализация, DIM »
31
Метаданные: рефлексия, атрибуты, генераторы кода
~2 h
selon le plan de l’auteur, après l’une de celles-ci : « Что на самом деле происходит, когда вы жмёте F5 », « Обобщения: ограничения, реификация, вариантность »
13
Коллекции: выбор структуры данных и её цена
~2 h
selon le plan de l’auteur, après « Обобщения: ограничения, реификация, вариантность »
14
LINQ: отложенное выполнение, yield, IQueryable
~2 h
selon le plan de l’auteur, après « Коллекции: выбор структуры данных и её цена »
15
Исключения: чем они являются и чем не являются
~2 h
selon le plan de l’auteur, après « Инкапсуляция и конструирование: объект, который нельзя собрать неправильно »
30
Данные на границе: JSON, файлы и потоки, даты и время
~2 h
selon le plan de l’auteur, après l’une de celles-ci : « Исключения: чем они являются и чем не являются », « async/await: что это и чего это не »
16
async/await: что это и чего это не
~2,5 h
selon le plan de l’auteur, après « Делегаты, лямбды, замыкания, события »
29
Конкурентность: lock, Lock, Interlocked, SemaphoreSlim, Channel, Parallel
~2 h
selon le plan de l’auteur, après « async/await: что это и чего это не »
17
SRP: одна причина для изменения
~2 h
selon le plan de l’auteur, après « Интерфейсы: контракт, явная реализация, DIM »
18
OCP: открыт для расширения, закрыт для изменения
~2 h
selon le plan de l’auteur, après « SRP: одна причина для изменения »
19
LSP: подтип обязан быть заменяемым
~2 h
selon le plan de l’auteur, après « OCP: открыт для расширения, закрыт для изменения »
20
ISP: клиента не заставляют зависеть от лишнего
~1,5 h
selon le plan de l’auteur, après « LSP: подтип обязан быть заменяемым »
21
~2,5 h
selon le plan de l’auteur, après « ISP: клиента не заставляют зависеть от лишнего »
22
Порождающие паттерны: кто и как создаёт объекты
~2 h
selon le plan de l’auteur, après « DIP и внедрение зависимостей »
23
Структурные паттерны: как собирать объекты в целое
~2 h
selon le plan de l’auteur, après « DIP и внедрение зависимостей »
24
Поведенческие паттерны: кто кого вызывает и когда
~2 h
selon le plan de l’auteur, après « DIP и внедрение зависимостей », « Делегаты, лямбды, замыкания, события »
25
Прикладные паттерны .NET: Repository, Options, CQRS, Result
~2 h
selon le plan de l’auteur, après 2 de celles-ci : « Порождающие паттерны: кто и как создаёт объекты », « Структурные паттерны: как собирать объекты в целое », « Поведенческие паттерны: кто кого вызывает и когда »
32
Что нового в C# 13 и 14 и как об этом спрашивают
~2 h
selon le plan de l’auteur, après « Финал: тестируемость и разговор об архитектуре вслух »
26
Финал: тестируемость и разговор об архитектуре вслух
~2,5 h
selon le plan de l’auteur, après « Прикладные паттерны .NET: Repository, Options, CQRS, Result », « async/await: что это и чего это не »
33 · C# в приложении
Хост, DI на практике, конфигурация, логирование
~2 h
selon le plan de l’auteur, après « DIP и внедрение зависимостей »
34 · C# в приложении
Minimal API: конвейер, привязка, валидация, ошибки
~2 h
selon le plan de l’auteur, après « Хост, DI на практике, конфигурация, логирование »
35 · C# в приложении
HttpClient, устойчивость и фоновые задачи
~2 h
selon le plan de l’auteur, après « Хост, DI на практике, конфигурация, логирование », « async/await: что это и чего это не »
36 · C# в приложении
~2 h
selon le plan de l’auteur, après « Хост, DI на практике, конфигурация, логирование », « LINQ: отложенное выполнение, yield, IQueryable »
37 · C# в приложении
Тесты сервиса: от модуля до HTTP
~2 h
selon le plan de l’auteur, après « Хост, DI на практике, конфигурация, логирование », « Финал: тестируемость и разговор об архитектуре вслух »
38 · C# в приложении
Выпуск в Azure: App Service, секреты, managed identity
~2 h
selon le plan de l’auteur, après « Minimal API: конвейер, привязка, валидация, ошибки »
final · dans le navigateur, sans l’assistant
Examen
fermée · inscrivez-vous au cours
| 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 |