Основы программирования на C#

       

Имя .Net

Имя .Net
Visual Studio .Net - открытая среда разработки
Открытость
Framework .Net - единый каркас среды разработки
Библиотека классов FCL - статический компонент каркаса
Единство каркаса
Встроенные примитивные типы
Структурные типы
Архитектура приложений
Модульность

Общеязыковая исполнительная среда CLR - динамический компонент каркаса
Двухэтапная компиляция. Управляемый модуль и управляемый код
Виртуальная машина
Дизассемблер и ассемблер
Метаданные
Сборщик мусора - Garbage Collector - и управление памятью
Исключительные ситуации
События
Общие спецификации и совместимые модули
Создание C#

Виды проектов
Консольный проект
Windows-проект
Начало начал - точка "большого взрыва"
Выполнение проекта по умолчанию после "большого взрыва"
Проект WindowsHello
Общий взгляд
Система типов

Типы или классы? И типы, и классы
Семантика присваивания
Преобразование к типу object
Примеры преобразований
Семантика присваивания. Преобразования между ссылочными и значимыми типами
Операции "упаковать" и "распаковать" (boxing и unboxing).
Где, как и когда выполняются преобразования типов?
Преобразования ссылочных типов

Преобразования типов в выражениях
Преобразования внутри арифметического типа
Явные преобразования
Преобразования строкового типа
Преобразования и класс Convert
Проверяемые преобразования
Исключения и охраняемые блоки. Первое знакомство
Опасные вычисления в охраняемых проверяемых блоках
Опасные вычисления в охраняемых непроверяемых блоках

Опасные преобразования и методы класса Convert
Объявление переменных
Проект Variables
Синтаксис объявления
Время жизни и область видимости переменных
Поля
Глобальные переменные уровня модуля. Существуют ли они в C#?
Локальные переменные

Глобальные переменные уровня процедуры. Существуют ли?
Константы
Выражения
Приоритет и порядок выполнения операций
Перегрузка операций
С чего начинается выполнение выражения
Операции "увеличить" и "уменьшить" (increment, decrement)
Операции sizeof и typeof
Как получить подробную информацию о классе?

Статические поля и методы арифметических классов
Операция new
Арифметические операции
Операции отношения
Операции проверки типов
Операции сдвига
Логические операции
Условное выражение
Операция приведения к типу

Присваивание
Специальные случаи присваивания
Определенное присваивание
Еще раз о семантике присваивания
Рассмотрим объявления:
Класс Math и его функции
Класс Random и его функции
Операторы языка C#

Оператор присваивания
Блок или составной оператор
Пустой оператор
Операторы выбора
Оператор if
Оператор switch
Операторы перехода

Оператор goto
Операторы break и continue
Оператор return
Оператор for
Циклы While
Цикл foreach
Процедуры и функции - функциональные модули
Процедуры и функции - методы класса
Процедуры и функции. Отличия
Описание методов (процедур и функций). Синтаксис

Список формальных аргументов
Тело метода
Вызов метода. Синтаксис
О соответствии списков формальных и фактических аргументов
Вызов метода. Семантика
Что нужно знать о методах?
Почему у методов мало аргументов?
Поля класса или функции без аргументов?
Пример: две версии класса Account

Функции с побочным эффектом
Методы. Перегрузка
Корректность методов
Инварианты и варианты цикла
Рекурсия

Рекурсивное решение задачи "Ханойские башни"
Быстрая сортировка Хоара
Общий взгляд
Объявление массивов
Объявление одномерных массивов
Динамические массивы

Многомерные массивы
Массивы массивов
Процедуры и массивы
Класс Array
Массивы как коллекции
Сортировка и поиск. Статические методы класса Array

Сводка свойств и методов класса Array
Класс Object и массивы
Массивы объектов
Массивы. Семантика присваивания
Общий взгляд
Строки С++
Строки С#

Класс char

Класс char

Класс char[] - массив символов
Существует ли в C# тип char*
Класс String
Объявление строк. Конструкторы класса string
Операции над строками
Строковые константы
Неизменяемый класс string
Статические свойства и методы класса String
Метод Format

Методы Join и Split
Динамические методы класса String
Класс StringBuilder - построитель строк
Объявление строк. Конструкторы класса StringBuilder
Операции над строками
Основные методы
Емкость буфера

Пространство имен RegularExpression и классы регулярных выражений
Немного теории
Синтаксис регулярных выражений
Знакомство с классами пространства RegularExpressions
Класс Regex
Классы Match и MatchCollection
Классы Group и GroupCollection
Классы Capture и CaptureCollection
Перечисление RegexOptions
Класс RegexCompilationInfo

Примеры работы с регулярными выражениями
Пример "чет и нечет"
Пример "око и рококо"
Пример "кок и кук"
Пример "обратные ссылки"
Пример "Дом Джека"
Пример "Атрибуты"

Классы и ООП
Две роли классов
Синтаксис класса
Поля класса
Доступ к полям
Методы класса
Доступ к методам
Методы-свойства
Индексаторы

Операции
Статические поля и методы класса
Константы
Конструкторы класса
Деструкторы класса
Проектирование класса Rational
Свойства класса Rational
Конструкторы класса Rational
Методы класса Rational

Закрытый метод НОД
Печать рациональных чисел
Тестирование создания рациональных чисел
Операции над рациональными числами
Константы класса Rational
Развернутые и ссылочные типы
Классы и структуры
Структуры

Синтаксис структур
Класс Rational или структура Rational
Встроенные структуры
Еще раз о двух семантиках присваивания
Перечисления
Персоны и профессии
Отношения между классами
Отношения "является" и "имеет"
Отношение вложенности

Расширение определения клиента класса
Отношения между клиентами и поставщиками
Сам себе клиент
Наследование
Добавление полей потомком
Конструкторы родителей и потомков
Добавление методов и изменение методов родителя
Статический контроль типов и динамическое связывание

Три механизма, обеспечивающие полиморфизм
Пример работы с полиморфным семейством классов
Абстрактные классы
Классы без потомков
Интерфейсы
Две стратегии реализации интерфейса
Преобразование к классу интерфейса
Проблемы множественного наследования

Коллизия имен
Наследование от общего предка
Встроенные интерфейсы
Упорядоченность объектов и интерфейс IComparable
Клонирование и интерфейс ICloneable
Сериализация объектов
Класс с атрибутом сериализации

Интерфейс ISerializable
Как определяется функциональный тип и как появляются его экземпляры
Функции высших порядков

Вычисление интеграла
Построение программных систем методом "раскрутки". Функции обратного вызова
Наследование и полиморфизм - альтернатива обратному вызову
Делегаты как свойства
Операции над делегатами. Класс Delegate

Операции "+" и "-"
Пример "Комбинирование делегатов"
Пример "Плохая служба"
Классы с событиями
Класс sender. Как объявляются события?
Делегаты и события
Как зажигаются события
Классы receiver. Как обрабатываются события
Классы с событиями, допустимые в каркасе .Net Framework

Пример "Списки с событиями"
Класс sender
Классы receiver
Две проблемы с обработчиками событий
Игнорирование коллег
Переопределение значений аргументов события
Классы с большим числом событий

Проект "Город и его службы"
Наследование и универсальность
Синтаксис универсального класса
Класс с универсальными методами

Два основных механизма объектной технологии

Два основных механизма объектной технологии
Стек. От абстрактного, универсального класса к конкретным версиям

Ограниченная универсальность
Синтаксис ограничений
Список с возможностью поиска элементов по ключу
Как справиться с арифметикой
Родовое порождение класса. Предложение using
Универсальность и специальные случаи классов
Универсальные структуры

Универсальные интерфейсы
Универсальные делегаты
Framework .Net и универсальность
Корректность и устойчивость программных систем
Жизненный цикл программной системы
Первый закон (закон для разработчика)
Второй закон (закон для пользователя)
Третий закон (закон чечако)
Отладка

Создание надежного кода
Искусство отладки
Отладочная печать и условная компиляция
Классы Debug и Trace
Метод Флойда и утверждения Assert
Классы StackTrace и BooleanSwitch

Отладка и инструментальная среда Visual Studio .Net
Обработка исключительных ситуаций
Обработка исключений в языках C/C++
Схема обработки исключений в C#
Выбрасывание исключений. Создание объектов Exception
Захват исключения
Параллельная работа обработчиков исключений
Блок finally
Схема Бертрана обработки исключительных ситуаций

Класс Exception
Организация интерфейса
Форма и элементы управления
Взаимодействие форм
Модальные и немодальные формы
Передача информации между формами
Образцы форм
Главная кнопочная форма
Шаблон формы для работы с классом

Работа со списками (еще один шаблон)
Элемент управления класса ListBox
Наследование форм
Два наследника формы TwoLists
Организация меню в формах
Создание меню в режиме проектирования

Классы меню
Создание инструментальной панели с командными кнопками
Рисование в форме
Класс Graphics
Методы класса Graphics
Класс Pen
Класс Brush
Проект "Паутина Безье, кисти и краски"
Паутина Безье

Событие Paint
Кисти и краски
В этой заключительной лекции новый
Классы семейства геометрических фигур
Класс Ellipse
Класс Circle
Класс LittleCircle
Класс Rect

Класс Square
Класс Person
Список с курсором. Динамические структуры данных
Классы элементов списка
Организация интерфейса