C# 14 и .NET 10: от поверхностного знания к рабочему (Extended)
Курс для программистов, которые 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.
Tu lección es en tu idioma: la dirige tu asistente.
- Material: ruso
- Examen: ruso; se hace en el sitio, sin traducir
Cómo funciona
Tu asistente toma el material del curso de nuestro servidor y dirige la lección en tu idioma.
El examen se hace en el sitio, sin asistente. Las preguntas del examen no se traducen: así se ha decidido para todos los cursos.
Recorrido por el curso
· 38 unidadesorden libre · los niveles de abajo son el orden que sugiere el autor, no una condiciónVista: mapa · niveles
Nivel 1
~2 h
Nivel 2
~2 h
2 · según el diseño del autor, después de «Что на самом деле происходит, когда вы жмёте F5»
Значимые и ссылочные типы: стек, куча и упаковка
~2 h
Nivel 3
~5,5 h
según el diseño del autor, después de «Значимые и ссылочные типы: стек, куча и упаковка»
Nivel 4
~7,5 h
5 · según el diseño del autor, después de «class, struct, record: чем объявлять данные»
Равенство, хеш и сравнение: контракт, который легко нарушить
~2 h
6 · según el diseño del autor, después de «class, struct, record: чем объявлять данные»
null: nullable-типы, ссылочная нулевая аннотация и что с этим делать
~1,5 h
28 · según el diseño del autor, después de cualquiera de estas: «Значимые и ссылочные типы: стек, куча и упаковка», «Строки: неизменяемость, интернирование, StringBuilder, Span»
Span, Memory, ref struct и как мерить
~2 h
8 · según el diseño del autor, después de «class, struct, record: чем объявлять данные»
Инкапсуляция и конструирование: объект, который нельзя собрать неправильно
~2 h
Nivel 5
~8 h
27 · según el diseño del autor, después de cualquiera de estas: «class, struct, record: чем объявлять данные», «null: nullable-типы, ссылочная нулевая аннотация и что с этим делать»
Сопоставление с образцом, кортежи, деконструкция
~2 h
9 · según el diseño del autor, después de «Инкапсуляция и конструирование: объект, который нельзя собрать неправильно»
Наследование и полиморфизм: virtual, override, new, sealed
~2 h
11 · según el diseño del autor, después de «Инкапсуляция и конструирование: объект, который нельзя собрать неправильно»
Делегаты, лямбды, замыкания, события
~2 h
15 · según el diseño del autor, después de «Инкапсуляция и конструирование: объект, который нельзя собрать неправильно»
Исключения: чем они являются и чем не являются
~2 h
Nivel 6
~4 h
10 · según el diseño del autor, después de «Наследование и полиморфизм: virtual, override, new, sealed»
Интерфейсы: контракт, явная реализация, DIM
~1,5 h
16 · según el diseño del autor, después de «Делегаты, лямбды, замыкания, события»
async/await: что это и чего это не
~2,5 h
Nivel 7
~8 h
12 · según el diseño del autor, después de «Интерфейсы: контракт, явная реализация, DIM»
Обобщения: ограничения, реификация, вариантность
~2 h
30 · según el diseño del autor, después de cualquiera de estas: «Исключения: чем они являются и чем не являются», «async/await: что это и чего это не»
Данные на границе: JSON, файлы и потоки, даты и время
~2 h
29 · según el diseño del autor, después de «async/await: что это и чего это не»
Конкурентность: lock, Lock, Interlocked, SemaphoreSlim, Channel, Parallel
~2 h
17 · según el diseño del autor, después de «Интерфейсы: контракт, явная реализация, DIM»
SRP: одна причина для изменения
~2 h
Nivel 8
~6 h
31 · según el diseño del autor, después de cualquiera de estas: «Что на самом деле происходит, когда вы жмёте F5», «Обобщения: ограничения, реификация, вариантность»
Метаданные: рефлексия, атрибуты, генераторы кода
~2 h
13 · según el diseño del autor, después de «Обобщения: ограничения, реификация, вариантность»
Коллекции: выбор структуры данных и её цена
~2 h
18 · según el diseño del autor, después de «SRP: одна причина для изменения»
OCP: открыт для расширения, закрыт для изменения
~2 h
Nivel 9
~4 h
14 · según el diseño del autor, después de «Коллекции: выбор структуры данных и её цена»
LINQ: отложенное выполнение, yield, IQueryable
~2 h
19 · según el diseño del autor, después de «OCP: открыт для расширения, закрыт для изменения»
LSP: подтип обязан быть заменяемым
~2 h
Nivel 10
~1,5 h
20 · según el diseño del autor, después de «LSP: подтип обязан быть заменяемым»
ISP: клиента не заставляют зависеть от лишнего
~1,5 h
Nivel 11
~2,5 h
21 · según el diseño del autor, después de «ISP: клиента не заставляют зависеть от лишнего»
~2,5 h
Nivel 12
~8 h
22 · según el diseño del autor, después de «DIP и внедрение зависимостей»
Порождающие паттерны: кто и как создаёт объекты
~2 h
23 · según el diseño del autor, después de «DIP и внедрение зависимостей»
Структурные паттерны: как собирать объекты в целое
~2 h
24 · según el diseño del autor, después de «DIP и внедрение зависимостей», «Делегаты, лямбды, замыкания, события»
Поведенческие паттерны: кто кого вызывает и когда
~2 h
33 · C# в приложении · según el diseño del autor, después de «DIP и внедрение зависимостей»
Хост, DI на практике, конфигурация, логирование
~2 h
Nivel 13
~8 h
25 · según el diseño del autor, después de 2 de estas: «Порождающие паттерны: кто и как создаёт объекты», «Структурные паттерны: как собирать объекты в целое», «Поведенческие паттерны: кто кого вызывает и когда»
Прикладные паттерны .NET: Repository, Options, CQRS, Result
~2 h
34 · C# в приложении · según el diseño del autor, después de «Хост, DI на практике, конфигурация, логирование»
Minimal API: конвейер, привязка, валидация, ошибки
~2 h
35 · C# в приложении · según el diseño del autor, después de «Хост, DI на практике, конфигурация, логирование», «async/await: что это и чего это не»
HttpClient, устойчивость и фоновые задачи
~2 h
36 · C# в приложении · según el diseño del autor, después de «Хост, DI на практике, конфигурация, логирование», «LINQ: отложенное выполнение, yield, IQueryable»
~2 h
Nivel 14
~4,5 h
26 · según el diseño del autor, después de «Прикладные паттерны .NET: Repository, Options, CQRS, Result», «async/await: что это и чего это не»
Финал: тестируемость и разговор об архитектуре вслух
~2,5 h
38 · C# в приложении · según el diseño del autor, después de «Minimal API: конвейер, привязка, валидация, ошибки»
Выпуск в Azure: App Service, секреты, managed identity
~2 h
Nivel 15
~4 h
32 · según el diseño del autor, después de «Финал: тестируемость и разговор об архитектуре вслух»
Что нового в C# 13 и 14 и как об этом спрашивают
~2 h
37 · C# в приложении · según el diseño del autor, después de «Хост, DI на практике, конфигурация, логирование», «Финал: тестируемость и разговор об архитектуре вслух»
Тесты сервиса: от модуля до HTTP
~2 h
Examen
cerrada · inscríbete en el curso
final · en el navegador, sin el asistente
Examen
El recorrido en palabras
- Nivel 1 · Что на самом деле происходит, когда вы жмёте F5 — ~2 h
- Nivel 2 · Значимые и ссылочные типы: стек, куча и упаковка — según el diseño del autor, después de «Что на самом деле происходит, когда вы жмёте F5»; ~2 h
- Nivel 3 · Память и время жизни: сборщик мусора, IDisposable, using — según el diseño del autor, después de «Значимые и ссылочные типы: стек, куча и упаковка»; ~2 h
- Nivel 3 · class, struct, record: чем объявлять данные — según el diseño del autor, después de «Значимые и ссылочные типы: стек, куча и упаковка»; ~2 h
- Nivel 3 · Строки: неизменяемость, интернирование, StringBuilder, Span — según el diseño del autor, después de «Значимые и ссылочные типы: стек, куча и упаковка»; ~1,5 h
- Nivel 4 · Равенство, хеш и сравнение: контракт, который легко нарушить — según el diseño del autor, después de «class, struct, record: чем объявлять данные»; ~2 h
- Nivel 4 · null: nullable-типы, ссылочная нулевая аннотация и что с этим делать — según el diseño del autor, después de «class, struct, record: чем объявлять данные»; ~1,5 h
- Nivel 4 · Span, Memory, ref struct и как мерить — según el diseño del autor, después de cualquiera de estas: «Значимые и ссылочные типы: стек, куча и упаковка», «Строки: неизменяемость, интернирование, StringBuilder, Span»; ~2 h
- Nivel 4 · Инкапсуляция и конструирование: объект, который нельзя собрать неправильно — según el diseño del autor, después de «class, struct, record: чем объявлять данные»; ~2 h
- Nivel 5 · Сопоставление с образцом, кортежи, деконструкция — según el diseño del autor, después de cualquiera de estas: «class, struct, record: чем объявлять данные», «null: nullable-типы, ссылочная нулевая аннотация и что с этим делать»; ~2 h
- Nivel 5 · Наследование и полиморфизм: virtual, override, new, sealed — según el diseño del autor, después de «Инкапсуляция и конструирование: объект, который нельзя собрать неправильно»; ~2 h
- Nivel 5 · Делегаты, лямбды, замыкания, события — según el diseño del autor, después de «Инкапсуляция и конструирование: объект, который нельзя собрать неправильно»; ~2 h
- Nivel 5 · Исключения: чем они являются и чем не являются — según el diseño del autor, después de «Инкапсуляция и конструирование: объект, который нельзя собрать неправильно»; ~2 h
- Nivel 6 · Интерфейсы: контракт, явная реализация, DIM — según el diseño del autor, después de «Наследование и полиморфизм: virtual, override, new, sealed»; ~1,5 h
- Nivel 6 · async/await: что это и чего это не — según el diseño del autor, después de «Делегаты, лямбды, замыкания, события»; ~2,5 h
- Nivel 7 · Обобщения: ограничения, реификация, вариантность — según el diseño del autor, después de «Интерфейсы: контракт, явная реализация, DIM»; ~2 h
- Nivel 7 · Данные на границе: JSON, файлы и потоки, даты и время — según el diseño del autor, después de cualquiera de estas: «Исключения: чем они являются и чем не являются», «async/await: что это и чего это не»; ~2 h
- Nivel 7 · Конкурентность: lock, Lock, Interlocked, SemaphoreSlim, Channel, Parallel — según el diseño del autor, después de «async/await: что это и чего это не»; ~2 h
- Nivel 7 · SRP: одна причина для изменения — según el diseño del autor, después de «Интерфейсы: контракт, явная реализация, DIM»; ~2 h
- Nivel 8 · Метаданные: рефлексия, атрибуты, генераторы кода — según el diseño del autor, después de cualquiera de estas: «Что на самом деле происходит, когда вы жмёте F5», «Обобщения: ограничения, реификация, вариантность»; ~2 h
- Nivel 8 · Коллекции: выбор структуры данных и её цена — según el diseño del autor, después de «Обобщения: ограничения, реификация, вариантность»; ~2 h
- Nivel 8 · OCP: открыт для расширения, закрыт для изменения — según el diseño del autor, después de «SRP: одна причина для изменения»; ~2 h
- Nivel 9 · LINQ: отложенное выполнение, yield, IQueryable — según el diseño del autor, después de «Коллекции: выбор структуры данных и её цена»; ~2 h
- Nivel 9 · LSP: подтип обязан быть заменяемым — según el diseño del autor, después de «OCP: открыт для расширения, закрыт для изменения»; ~2 h
- Nivel 10 · ISP: клиента не заставляют зависеть от лишнего — según el diseño del autor, después de «LSP: подтип обязан быть заменяемым»; ~1,5 h
- Nivel 11 · DIP и внедрение зависимостей — según el diseño del autor, después de «ISP: клиента не заставляют зависеть от лишнего»; ~2,5 h
- Nivel 12 · Порождающие паттерны: кто и как создаёт объекты — según el diseño del autor, después de «DIP и внедрение зависимостей»; ~2 h
- Nivel 12 · Структурные паттерны: как собирать объекты в целое — según el diseño del autor, después de «DIP и внедрение зависимостей»; ~2 h
- Nivel 12 · Поведенческие паттерны: кто кого вызывает и когда — según el diseño del autor, después de «DIP и внедрение зависимостей», «Делегаты, лямбды, замыкания, события»; ~2 h
- Nivel 12 · Хост, DI на практике, конфигурация, логирование — según el diseño del autor, después de «DIP и внедрение зависимостей»; opcional; ~2 h
- Nivel 13 · Прикладные паттерны .NET: Repository, Options, CQRS, Result — según el diseño del autor, después de 2 de estas: «Порождающие паттерны: кто и как создаёт объекты», «Структурные паттерны: как собирать объекты в целое», «Поведенческие паттерны: кто кого вызывает и когда»; ~2 h
- Nivel 13 · Minimal API: конвейер, привязка, валидация, ошибки — según el diseño del autor, después de «Хост, DI на практике, конфигурация, логирование»; opcional; ~2 h
- Nivel 13 · HttpClient, устойчивость и фоновые задачи — según el diseño del autor, después de «Хост, DI на практике, конфигурация, логирование», «async/await: что это и чего это не»; opcional; ~2 h
- Nivel 13 · EF Core без иллюзий — según el diseño del autor, después de «Хост, DI на практике, конфигурация, логирование», «LINQ: отложенное выполнение, yield, IQueryable»; opcional; ~2 h
- Nivel 14 · Финал: тестируемость и разговор об архитектуре вслух — según el diseño del autor, después de «Прикладные паттерны .NET: Repository, Options, CQRS, Result», «async/await: что это и чего это не»; ~2,5 h
- Nivel 14 · Выпуск в Azure: App Service, секреты, managed identity — según el diseño del autor, después de «Minimal API: конвейер, привязка, валидация, ошибки»; opcional; ~2 h
- Nivel 15 · Что нового в C# 13 и 14 и как об этом спрашивают — según el diseño del autor, después de «Финал: тестируемость и разговор об архитектуре вслух»; ~2 h
- Nivel 15 · Тесты сервиса: от модуля до HTTP — según el diseño del autor, después de «Хост, DI на практике, конфигурация, логирование», «Финал: тестируемость и разговор об архитектуре вслух»; opcional; ~2 h
Programa · 38 unidades
| 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 |
