1. Организация хранения в памяти объектов в языке C#. Value и reference типы. Возможный пример: сравнение значений класса и структуры при присваивании.
2. Преобразование типов. Явное и неявное преобразование типов. Преобразование типов при наследовании. Операторы explicit и implicit. Возможный пример: перегрузка операторов explicit и implicit для 2D и 3D векторов и демонстрация работы с ними.
3. Понятие оператора. Унарные, бинарные и тернарный операторы. Виды операторов в C#. Арифметические операторы. Логические операторы и операторы сравнения. Битовые операторы. Возможный пример: проверка попадания точки в область.
4. Условные операторы: if, ?: Синтаксис, ключевые особенности, рекомендации по использованию. Возможный пример: проверка попадания точки в область.
5. Оператор варианта: switch. Синтаксис, ключевые особенности, рекомендации по использованию. Переходы по веткам оператора switch. Возможный пример: выбор действия по коду нажатой клавиши и т.д.
6. Операторы цикла. Ключевые понятия, синтаксис, примеры использования. Вложенные циклы, операторы break и continue. Возможный пример: сортировка, поиск и т.д.
7. Понятие массива. Особенности организации хранения массивов в памяти. Многомерные и рваные массивы. Возможный пример: поиск по многомерному, или рваному массиву.
8. Понятие функции (метода). Назначение, синтаксис объявления и использование методов. Критерии создания методов. Способы передачи параметров в метод. Синтаксис, особенности. Возможный пример: любой алгоритм, оформленный в виде метода.
9. Строки. Типовые операции работы со строками. Работа со строками как с массивами символов. Класс StringBuilder. Возможный пример: определение частоты встречаемости слов в тексте.
10. Файлы. Текстовые и двоичные файлы. Классы для работы с файлами и каталогами в C#. Возможный пример: Загрузить массив из файла, отсортировать, сохранить в выходной файл.
11. Понятие класса и объекта. Ключевые принципы построения классов. Абстрагирование. Возможный пример: класс шкаф, применительно к задаче размещения в комнате объектов заданного размера.
12. Инкапсуляция. Ключевые принципы, спецификаторы доступа (public, private и т.д.). Возможный пример: класс, описывающий окружность.
13. Наследование. Особенности работы конструкторов при наследовании. Совместимость ссылок при наследовании. Возможный пример: иерархия классов для векторного редактора.
14. Полиморфизм. Виды полиморфизма. Статический и динамический полиморфизм. Возможный пример: иерархия классов для векторного редактора.
15. Абстрактные классы и методы. Критерии «абстрактности» методов и классов. Возможный пример: иерархия классов для векторного редактора.
16. Основы проектирования иерархий классов. Принципы SOLID (первые 4 принципа). Возможные примеры: 1 пример по любому из указанных принципов из лекции, или http://ru.wikipedia.org/wiki/SOLID_(объектно-ориентированное_программирование).
17. Интерфейсы. Принципы формирования интерфейсов. Различия между интерфейсами и абстрактными классами. Возможный пример: иерархия классов для векторного редактора.
18. Коллекция List: ключевые принципы и алгоритм работы. Возможный пример: хранение иерархии классов для векторного редактора.
19. Коллекция Dictionary: ключевые принципы и алгоритм работы. Возможный пример: определение частоты встречаемости слов в тексте.
20. Коллекции Stack и Queue: ключевые принципы и алгоритм работы. Возможный пример: обход графа, или демонстрация решения задачи Иосифа (http://ru.wikipedia.org/wiki/Задача_Иосифа_Флавия)