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-типи, посилальна анотація null і що з цим робити
~1,5 год
за задумом автора — після «class, struct, record: чим оголошувати дані»
27
Зіставлення зі зразком, кортежі, деконструкція
~2 год
за задумом автора — після будь-якого із: «class, struct, record: чим оголошувати дані», «null: nullable-типи, посилальна анотація null і що з цим робити»
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
~2 год
за задумом автора — після «Інтерфейси: контракт, явна реалізація, DIM»
18
OCP: відкритий для розширення, закритий для зміни
~2 год
за задумом автора — після «SRP: одна причина для зміни»
19
LSP: підтип зобов'язаний бути замінним
~2 год
за задумом автора — після «OCP: відкритий для розширення, закритий для зміни»
20
ISP: клієнта не змушують залежати від зайвого
~1,5 год
за задумом автора — після «LSP: підтип зобов'язаний бути замінним»
21
DIP і впровадження залежностей
~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-типи, посилальна анотація null і що з цим робити Розрізняти Nullable<T> і nullable reference types: що робить компілятор, що робить рантайм (особливе упакування) і чого не робить ніхто | ~1,5 год |
| 7 | Зіставлення зі зразком, кортежі, деконструкція Переписувати ланцюжки if/else з is і зведеннями типів у switch-вираз і пояснювати, чому порядок гілок — частина змісту | ~2 год |
| 8 | Span, Memory, ref struct і як вимірювати Пояснювати, що таке Span<T> і ReadOnlySpan<T>, і передбачати, де зріз дає вікно, а де копію | ~2 год |