Основы программирования на C#
Имя .NetVisual Studio .Net - открытая среда разработки
Открытость
Framework .Net - единый каркас среды разработки
Библиотека классов FCL - статический компонент каркаса
Единство каркаса
Встроенные примитивные типы
Структурные типы
Архитектура приложений
Модульность
Общеязыковая исполнительная среда CLR - динамический компонент каркаса
Двухэтапная компиляция. Управляемый модуль и управляемый код
Виртуальная машина
Дизассемблер и ассемблер
Метаданные
Сборщик мусора - Garbage Collector - и управление памятью
Исключительные ситуации
События
Общие спецификации и совместимые модули
Создание C#
Виды проектов
Консольный проект
Язык C# и первые проекты
Windows-проект
Начало начал - точка "большого взрыва"
Выполнение проекта по умолчанию после "большого взрыва"
Проект WindowsHello
Основы программирования на C#
Общий взглядСистема типов
Типы или классы? И типы, и классы
Семантика присваивания
Преобразование к типу object
Примеры преобразований
Семантика присваивания. Преобразования между ссылочными и значимыми типами
Операции "упаковать" и "распаковать" (boxing и unboxing).
Основы программирования на C#
Где, как и когда выполняются преобразования типов?Преобразования ссылочных типов
Преобразования типов в выражениях
Преобразования внутри арифметического типа
Явные преобразования
Преобразования строкового типа
Преобразования и класс Convert
Проверяемые преобразования
Исключения и охраняемые блоки. Первое знакомство
Опасные вычисления в охраняемых проверяемых блоках
Опасные вычисления в охраняемых непроверяемых блоках
Опасные преобразования и методы класса Convert
Основы программирования на C#
Объявление переменных
Проект Variables
Синтаксис объявления
Время жизни и область видимости переменных
Поля
Глобальные переменные уровня модуля. Существуют ли они в C#?
Локальные переменные
Глобальные переменные уровня процедуры. Существуют ли?
Константы
Основы программирования на C#
ВыраженияПриоритет и порядок выполнения операций
Перегрузка операций
С чего начинается выполнение выражения
Операции "увеличить" и "уменьшить" (increment, decrement)
Операции sizeof и typeof
Как получить подробную информацию о классе?
Статические поля и методы арифметических классов
Операция new
Арифметические операции
Операции отношения
Операции проверки типов
Операции сдвига
Логические операции
Условное выражение
Операция приведения к типу
Основы программирования на C#
ПрисваиваниеСпециальные случаи присваивания
Определенное присваивание
Еще раз о семантике присваивания
Рассмотрим объявления:
Класс Math и его функции
Класс Random и его функции
Операторы языка C#
Оператор присваивания
Блок или составной оператор
Пустой оператор
Операторы выбора
Оператор if
Оператор switch
Операторы перехода
Оператор goto
Операторы break и continue
Оператор return
Оператор for
Циклы While
Цикл foreach
Основы программирования на C#
Процедуры и функции - функциональные модулиПроцедуры и функции - методы класса
Процедуры и функции. Отличия
Описание методов (процедур и функций). Синтаксис
Список формальных аргументов
Тело метода
Вызов метода. Синтаксис
О соответствии списков формальных и фактических аргументов
Вызов метода. Семантика
Что нужно знать о методах?
Почему у методов мало аргументов?
Поля класса или функции без аргументов?
Пример: две версии класса Account
Функции с побочным эффектом
Методы. Перегрузка
Корректность методов
Инварианты и варианты цикла
Рекурсия
Рекурсивное решение задачи "Ханойские башни"
Быстрая сортировка Хоара
Общий взгляд
Объявление массивов
Объявление одномерных массивов
Массивы языка C#
Динамические массивы
Многомерные массивы
Массивы массивов
Процедуры и массивы
Основы программирования на C#
Класс ArrayМассивы как коллекции
Сортировка и поиск. Статические методы класса Array
Сводка свойств и методов класса Array
Класс Object и массивы
Массивы объектов
Массивы. Семантика присваивания
Общий взгляд
Строки С++
Класс char
Символы и строки постоянной длины в C#
Класс char[] - массив символов
Существует ли в C# тип char*
Класс String
Объявление строк. Конструкторы класса string
Операции над строками
Строковые константы
Неизменяемый класс string
Статические свойства и методы класса String
Метод Format
Методы Join и Split
Динамические методы класса String
Класс StringBuilder - построитель строк
Объявление строк. Конструкторы класса StringBuilder
Основные методы
Емкость буфера
Пространство имен RegularExpression и классы регулярных выражений
Немного теории
Синтаксис регулярных выражений
Знакомство с классами пространства RegularExpressions
Класс Regex
Классы Match и MatchCollection
Классы Group и GroupCollection
Классы Capture и CaptureCollection
Перечисление RegexOptions
Класс RegexCompilationInfo
Примеры работы с регулярными выражениями
Пример "чет и нечет"
Пример "око и рококо"
Пример "кок и кук"
Пример "обратные ссылки"
Пример "Дом Джека"
Пример "Атрибуты"
Основы программирования на C#
Классы и ООПДве роли классов
Синтаксис класса
Поля класса
Доступ к полям
Методы класса
Доступ к методам
Методы-свойства
Индексаторы
Операции
Статические поля и методы класса
Конструкторы класса
Деструкторы класса
Проектирование класса Rational
Свойства класса Rational
Конструкторы класса Rational
Методы класса Rational
Закрытый метод НОД
Печать рациональных чисел
Тестирование создания рациональных чисел
Операции над рациональными числами
Операции над рациональными числами - 2
Константы класса Rational
Развернутые и ссылочные типы
Классы и структуры
Структуры
Синтаксис структур
Класс Rational или структура Rational
Встроенные структуры
Еще раз о двух семантиках присваивания
Перечисления
Персоны и профессии
Основы программирования на C#
Отношения между классамиОтношения "является" и "имеет"
Отношение вложенности
Расширение определения клиента класса
Отношения между клиентами и поставщиками
Сам себе клиент
Наследование
Добавление полей потомком
Конструкторы родителей и потомков
Добавление методов и изменение методов родителя
Статический контроль типов и динамическое связывание
Три механизма, обеспечивающие полиморфизм
Пример работы с полиморфным семейством классов
Абстрактные классы
Классы без потомков
Основы программирования на C#
ИнтерфейсыДве стратегии реализации интерфейса
Преобразование к классу интерфейса
Проблемы множественного наследования
Коллизия имен
Наследование от общего предка
Встроенные интерфейсы
Упорядоченность объектов и интерфейс IComparable
Клонирование и интерфейс ICloneable
Сериализация объектов
Класс с атрибутом сериализации
Интерфейс ISerializable
Как определяется функциональный тип и как появляются его экземпляры
Функции высших порядков
Вычисление интеграла
Построение программных систем методом "раскрутки". Функции обратного вызова
Наследование и полиморфизм - альтернатива обратному вызову
Делегаты как свойства
Операции над делегатами. Класс Delegate
Операции "+" и "-"
Пример "Комбинирование делегатов"
Пример "Плохая служба"
Классы с событиями
Класс sender. Как объявляются события?
Делегаты и события
Как зажигаются события
Классы receiver. Как обрабатываются события
Классы с событиями, допустимые в каркасе .Net Framework
Пример "Списки с событиями"
Класс sender
Классы receiver
Две проблемы с обработчиками событий
Игнорирование коллег
Переопределение значений аргументов события
Классы с большим числом событий
Проект "Город и его службы"
Основы программирования на C#
Наследование и универсальностьСинтаксис универсального класса
Класс с универсальными методами
Два основных механизма объектной технологии
Стек. От абстрактного, универсального класса к конкретным версиям
Ограниченная универсальность
Синтаксис ограничений
Список с возможностью поиска элементов по ключу
Как справиться с арифметикой
Родовое порождение класса. Предложение using
Универсальность и специальные случаи классов
Универсальные структуры
Универсальные интерфейсы
Универсальные делегаты
Framework .Net и универсальность
Основы программирования на C#
Корректность и устойчивость программных системЖизненный цикл программной системы
Первый закон (закон для разработчика)
Второй закон (закон для пользователя)
Третий закон (закон чечако)
Отладка
Создание надежного кода
Искусство отладки
Отладочная печать и условная компиляция
Классы Debug и Trace
Метод Флойда и утверждения Assert
Классы StackTrace и BooleanSwitch
Отладка и инструментальная среда Visual Studio .Net
Обработка исключительных ситуаций
Обработка исключений в языках C/C++
Схема обработки исключений в C#
Выбрасывание исключений. Создание объектов Exception
Захват исключения
Параллельная работа обработчиков исключений
Блок finally
Схема Бертрана обработки исключительных ситуаций
Класс Exception
Основы программирования на C#
Организация интерфейсаФорма и элементы управления
Взаимодействие форм
Модальные и немодальные формы
Передача информации между формами
Образцы форм
Главная кнопочная форма
Шаблон формы для работы с классом
Работа со списками (еще один шаблон)
Элемент управления класса ListBox
Наследование форм
Два наследника формы TwoLists
Организация меню в формах
Создание меню в режиме проектирования
Классы меню
Создание инструментальной панели с командными кнопками
Рисование в форме
Класс Graphics
Методы класса Graphics
Класс Pen
Класс Brush
Проект "Паутина Безье, кисти и краски"
Паутина Безье
Событие Paint
Кисти и краски
Абстрактный класс Figure
Классы семейства геометрических фигур
Класс Ellipse
Класс Circle
Класс LittleCircle
Класс Rect
Класс Square
Класс Person
Список с курсором. Динамические структуры данных
Классы элементов списка