К содержимому
L-SYSTEM

рекомендовансредний

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.

Материал и экзамен: русский · занятие ведёт ассистент

Как это устроено

Ассистент берёт материал курса с нашего сервера и ведёт занятие на вашем языке.

Экзамен сдаётся на сайте, без ассистента. Вопросы экзамена не переводятся: так решено для всех курсов.

Как подключить ассистента

Путь по курсу

· юнитов: 38

порядок свободный · ступени ниже — тот порядок, который предлагает автор, а не условиеВид: карта · ступени

28

Span, Memory, ref struct и как мерить

~2 ч

по замыслу автора — после любого из: «Значимые и ссылочные типы: стек, куча и упаковка», «Строки: неизменяемость, интернирование, StringBuilder, Span»

25

Прикладные паттерны .NET: Repository, Options, CQRS, Result

~2 ч

по замыслу автора — после 2 из: «Порождающие паттерны: кто и как создаёт объекты», «Структурные паттерны: как собирать объекты в целое», «Поведенческие паттерны: кто кого вызывает и когда»

36 · C# в приложении

EF Core без иллюзий

~2 ч

по замыслу автора — после «Хост, DI на практике, конфигурация, логирование», «LINQ: отложенное выполнение, yield, IQueryable»

37 · C# в приложении

Тесты сервиса: от модуля до HTTP

~2 ч

по замыслу автора — после «Хост, DI на практике, конфигурация, логирование», «Финал: тестируемость и разговор об архитектуре вслух»

финал · в браузере, без ассистента

Экзамен

закрыт · записаться на курс

Путь по курсу словами
  • Ступень 1 · Что на самом деле происходит, когда вы жмёте F5 — ~2 ч
  • Ступень 2 · Значимые и ссылочные типы: стек, куча и упаковка — по замыслу автора — после «Что на самом деле происходит, когда вы жмёте F5»; ~2 ч
  • Ступень 3 · Память и время жизни: сборщик мусора, IDisposable, using — по замыслу автора — после «Значимые и ссылочные типы: стек, куча и упаковка»; ~2 ч
  • Ступень 3 · class, struct, record: чем объявлять данные — по замыслу автора — после «Значимые и ссылочные типы: стек, куча и упаковка»; ~2 ч
  • Ступень 3 · Строки: неизменяемость, интернирование, StringBuilder, Span — по замыслу автора — после «Значимые и ссылочные типы: стек, куча и упаковка»; ~1,5 ч
  • Ступень 4 · Равенство, хеш и сравнение: контракт, который легко нарушить — по замыслу автора — после «class, struct, record: чем объявлять данные»; ~2 ч
  • Ступень 4 · null: nullable-типы, ссылочная нулевая аннотация и что с этим делать — по замыслу автора — после «class, struct, record: чем объявлять данные»; ~1,5 ч
  • Ступень 4 · Span, Memory, ref struct и как мерить — по замыслу автора — после любого из: «Значимые и ссылочные типы: стек, куча и упаковка», «Строки: неизменяемость, интернирование, StringBuilder, Span»; ~2 ч
  • Ступень 4 · Инкапсуляция и конструирование: объект, который нельзя собрать неправильно — по замыслу автора — после «class, struct, record: чем объявлять данные»; ~2 ч
  • Ступень 5 · Сопоставление с образцом, кортежи, деконструкция — по замыслу автора — после любого из: «class, struct, record: чем объявлять данные», «null: nullable-типы, ссылочная нулевая аннотация и что с этим делать»; ~2 ч
  • Ступень 5 · Наследование и полиморфизм: virtual, override, new, sealed — по замыслу автора — после «Инкапсуляция и конструирование: объект, который нельзя собрать неправильно»; ~2 ч
  • Ступень 5 · Делегаты, лямбды, замыкания, события — по замыслу автора — после «Инкапсуляция и конструирование: объект, который нельзя собрать неправильно»; ~2 ч
  • Ступень 5 · Исключения: чем они являются и чем не являются — по замыслу автора — после «Инкапсуляция и конструирование: объект, который нельзя собрать неправильно»; ~2 ч
  • Ступень 6 · Интерфейсы: контракт, явная реализация, DIM — по замыслу автора — после «Наследование и полиморфизм: virtual, override, new, sealed»; ~1,5 ч
  • Ступень 6 · async/await: что это и чего это не — по замыслу автора — после «Делегаты, лямбды, замыкания, события»; ~2,5 ч
  • Ступень 7 · Обобщения: ограничения, реификация, вариантность — по замыслу автора — после «Интерфейсы: контракт, явная реализация, DIM»; ~2 ч
  • Ступень 7 · Данные на границе: JSON, файлы и потоки, даты и время — по замыслу автора — после любого из: «Исключения: чем они являются и чем не являются», «async/await: что это и чего это не»; ~2 ч
  • Ступень 7 · Конкурентность: lock, Lock, Interlocked, SemaphoreSlim, Channel, Parallel — по замыслу автора — после «async/await: что это и чего это не»; ~2 ч
  • Ступень 7 · SRP: одна причина для изменения — по замыслу автора — после «Интерфейсы: контракт, явная реализация, DIM»; ~2 ч
  • Ступень 8 · Метаданные: рефлексия, атрибуты, генераторы кода — по замыслу автора — после любого из: «Что на самом деле происходит, когда вы жмёте F5», «Обобщения: ограничения, реификация, вариантность»; ~2 ч
  • Ступень 8 · Коллекции: выбор структуры данных и её цена — по замыслу автора — после «Обобщения: ограничения, реификация, вариантность»; ~2 ч
  • Ступень 8 · OCP: открыт для расширения, закрыт для изменения — по замыслу автора — после «SRP: одна причина для изменения»; ~2 ч
  • Ступень 9 · LINQ: отложенное выполнение, yield, IQueryable — по замыслу автора — после «Коллекции: выбор структуры данных и её цена»; ~2 ч
  • Ступень 9 · LSP: подтип обязан быть заменяемым — по замыслу автора — после «OCP: открыт для расширения, закрыт для изменения»; ~2 ч
  • Ступень 10 · ISP: клиента не заставляют зависеть от лишнего — по замыслу автора — после «LSP: подтип обязан быть заменяемым»; ~1,5 ч
  • Ступень 11 · DIP и внедрение зависимостей — по замыслу автора — после «ISP: клиента не заставляют зависеть от лишнего»; ~2,5 ч
  • Ступень 12 · Порождающие паттерны: кто и как создаёт объекты — по замыслу автора — после «DIP и внедрение зависимостей»; ~2 ч
  • Ступень 12 · Структурные паттерны: как собирать объекты в целое — по замыслу автора — после «DIP и внедрение зависимостей»; ~2 ч
  • Ступень 12 · Поведенческие паттерны: кто кого вызывает и когда — по замыслу автора — после «DIP и внедрение зависимостей», «Делегаты, лямбды, замыкания, события»; ~2 ч
  • Ступень 12 · Хост, DI на практике, конфигурация, логирование — по замыслу автора — после «DIP и внедрение зависимостей»; необязательный; ~2 ч
  • Ступень 13 · Прикладные паттерны .NET: Repository, Options, CQRS, Result — по замыслу автора — после 2 из: «Порождающие паттерны: кто и как создаёт объекты», «Структурные паттерны: как собирать объекты в целое», «Поведенческие паттерны: кто кого вызывает и когда»; ~2 ч
  • Ступень 13 · Minimal API: конвейер, привязка, валидация, ошибки — по замыслу автора — после «Хост, DI на практике, конфигурация, логирование»; необязательный; ~2 ч
  • Ступень 13 · HttpClient, устойчивость и фоновые задачи — по замыслу автора — после «Хост, DI на практике, конфигурация, логирование», «async/await: что это и чего это не»; необязательный; ~2 ч
  • Ступень 13 · EF Core без иллюзий — по замыслу автора — после «Хост, DI на практике, конфигурация, логирование», «LINQ: отложенное выполнение, yield, IQueryable»; необязательный; ~2 ч
  • Ступень 14 · Финал: тестируемость и разговор об архитектуре вслух — по замыслу автора — после «Прикладные паттерны .NET: Repository, Options, CQRS, Result», «async/await: что это и чего это не»; ~2,5 ч
  • Ступень 14 · Выпуск в Azure: App Service, секреты, managed identity — по замыслу автора — после «Minimal API: конвейер, привязка, валидация, ошибки»; необязательный; ~2 ч
  • Ступень 15 · Что нового в C# 13 и 14 и как об этом спрашивают — по замыслу автора — после «Финал: тестируемость и разговор об архитектуре вслух»; ~2 ч
  • Ступень 15 · Тесты сервиса: от модуля до HTTP — по замыслу автора — после «Хост, DI на практике, конфигурация, логирование», «Финал: тестируемость и разговор об архитектуре вслух»; необязательный; ~2 ч

Программа · 38 юнитов

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

Описать путь от исходника до машинного кода: Roslyn → IL и метаданные → JIT (tier0 → tier1) → машинный код, и что меняют Debug и Release

~2 ч
2Значимые и ссылочные типы: стек, куча и упаковка

Предсказывать поведение кода при присваивании и передаче в метод для значимых и ссылочных типов, включая структуры в коллекциях и кортежи

~2 ч
3Память и время жизни: сборщик мусора, IDisposable, using

Объяснить поколенческую сборку и почему её цена определяется выжившими, а не мёртвыми объектами

~2 ч
4class, struct, record: чем объявлять данные

Выбирать между class, struct, record class, record struct и readonly record struct по вопросу «значение или сущность», а не по привычке

~2 ч
5Равенство, хеш и сравнение: контракт, который легко нарушить

Предсказывать, что сравнивает == и что сравнивает Equals, по статическому и настоящему типу

~2 ч
6null: nullable-типы, ссылочная нулевая аннотация и что с этим делать

Различать Nullable<T> и nullable reference types: что делает компилятор, что делает рантайм (особая упаковка) и что не делает никто

~1,5 ч
7Сопоставление с образцом, кортежи, деконструкция

Переписывать цепочки if/else с is и приведениями в switch-выражение и объяснять, почему порядок веток — часть смысла

~2 ч
8Span, Memory, ref struct и как мерить

Объяснять, что такое Span<T> и ReadOnlySpan<T>, и предсказывать, где срез даёт окно, а где копию

~2 ч

Показать остальные 30 юнитов