Пробное собеседование на позицию Junior C#/.NET-разработчика: Кирилл рассказывает о переходе от Python и BIM/Revit к C#. Собеседующий последовательно проверяет базу по типам и памяти, ООП, интерфейсам, делегатам, событиям, LINQ, исключениям и SOLID, уточняя неточные ответы. В финале они разбирают проектирование чертёжного приложения: модель линии, взаимодействие с UI в WPF/MVVM и генерацию многоугольников.
Подготовить не только определения class и struct, но и объяснение ссылочных/значимых типов, размещения данных и передачи параметров, включая ref/out.
Уметь сравнить абстрактный класс и интерфейс: экземпляр абстрактного класса создать нельзя, класс наследует один класс, но может реализовать несколько интерфейсов.
Повторить лямбда-выражения, делегаты Action и Func, IEnumerable, LINQ-операторы Select/Where и различие между query syntax и extension-method syntax.
Разобрать связь делегатов и событий, синтаксис подписки/отписки и случай, когда подписка на событие другого объекта мешает освобождению подписчика из памяти.
Уметь объяснить StackOverflowException через бесконечную рекурсию и назвать IndexOutOfRangeException при обращении за границы коллекции.
Тренировать SOLID на прикладных примерах: обязанности классов, зависимость от абстракций и возможность расширять код без изменения существующей реализации.
Для практической части подготовить проектирование модели и UI: Line с координатами, цветом и толщиной, хранение линий в List, события мыши и отдельная связь доменной сущности с визуальным представлением.