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

         

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

Имя .Net
Visual 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
Список с курсором. Динамические структуры данных
Классы элементов списка