- •Введение в c# и платформу .Net Философия .Net
- •Введение в строительные блоки платформы .Net (clr, cts и cls)
- •Роль библиотек базовых классов
- •Понятие общей системы типов (cts)
- •Понятие общеязыковой спецификации (cls)
- •Понятие общеязыковой исполняющей среды (clr)
- •Различия между сборками, пространствами имен и типами
- •Лабораторная работа №1. Создание приложений на языке c# без использования ide Роль .Net Framework 4.5 sdk
- •Указание целевых входных и выходных параметров
- •Ссылка на внешние сборки
- •Построение приложений c# с использованием csc.Ехе
- •Компиляция нескольких файлов исходного кода
- •Лабораторная работа №2. Построение приложений .Net с помощью Visual Studio Создание нового проекта
- •Использование утилиты Solution Explorer
- •Ссылка на внешние сборки
- •Утилита Object Browser
- •Фрагменты кода и технология Surround With
- •Утилита Class Designer
- •Лабораторная работа №3. Основы программирования на c# Структура простой программы c#
- •Класс System.Console
- •Форматирование числовых данных
- •Системные типы данных и соответствующие ключевые слова c#
- •Объявление и инициализация переменных
- •Иерархия классов для типов данных
- •Члены числовых типов данных
- •Члены System.Boolean
- •Члены System.Char
- •Работа со строковыми данными
- •Базовые манипуляции строками
- •Управляющие последовательности
- •Итерационные конструкции c#
- •Лабораторная работа №4. Главные конструкции программирования на с# Методы и модификаторы параметров
- •Стандартное поведение передачи параметров по значению
- •Модификатор out
- •Модификатор ref
- •Модификатор params
- •Определение необязательных параметров
- •Вызов методов с использованием именованных параметров
- •Массивы в c# Объявление и инициализация массивов
- •Определение массива объектов
- •Базовый класс System.Array
- •Управление хранилищем, лежащим в основе перечисления
- •Объявление переменных типа перечисления
- •Динамическое извлечение пар “имя/значение” перечисления
- •Типы структур
- •Объектно- ориентированное программирование на c# Лабораторная работа №5. Работа с классами Знакомство с типом класса c#
- •Размещение объектов с помощью ключевого слова new
- •Определение специальных конструкторов
- •Роль ключевого слова this
- •Еще раз о необязательных аргументах
- •Понятие ключевого слова static
- •Определение статических полей данных
- •Определение статических классов
- •Основные принципы объектно-ориентированного программирования
- •Роль инкапсуляции
- •Роль наследования
- •Роль полиморфизма
- •Лабораторная работа №6. Инкапсуляция Модификаторы доступа c#
- •Стандартные модификаторы доступа
- •Первый принцип: службы инкапсуляции c#
- •Инкапсуляция с использованием традиционных методов доступа и изменения
- •Использование свойств внутри определения класса
- •Свойства, доступные только для чтения и только для записи
- •Взаимодействие с автоматическими свойствами
- •Понятие синтаксиса инициализации объектов
- •Работа с данными константных полей
- •Понятие полей, допускающих только чтение
- •Понятие частичных типов
- •Лабораторная работа №7. Наследование Базовый механизм наследования
- •Указание родительского класса для существующего класса
- •Ключевое слово sealed
- •Управление созданием базового класса с помощью ключевого слова base
- •Хранение секретов семейства: ключевое слово protected
- •Добавление запечатанного класса
- •Реализация модели включения/делегации
- •Определения вложенных типов
- •Лабораторная работа №8. Полиморфизм
- •Переопределение виртуальных членов в ide-среде Visual Studio
- •Запечатывание виртуальных членов
- •Абстрактные классы
- •Понятие полиморфного интерфейса
- •Сокрытие членов
- •Правила приведения к базовому и производному классу
- •Ключевое слово as
- •Ключевое слово is
- •Главный родительский класс System.Object
- •Переопределение System.Object.ToString()
- •Переопределение System.Object.Equals()
- •Статические члены System.Object
- •Лабораторная работа №9. Структурированная обработка исключений
- •Роль обработки исключений .Net
- •Строительные блоки обработки исключений в .Net
- •Базовый класс System.Exception
- •Простейший пример
- •Генерация общего исключения
- •Перехват исключений
- •Конфигурирование состояния исключения
- •Исключения уровня приложения (System.ApplicationException)
- •Построение специальных исключений, способ первый
- •Построение специальных исключений, способ второй
- •Обработка нескольких исключений
- •Общие операторы catch
- •Внутренние исключения
- •Какие исключения могут генерировать методы?
- •Результат наличия необработанных исключений
- •Лабораторная работа №10. Работа с интерфейсами Понятие интерфейсных типов
- •Реализация интерфейса
- •Вызов членов интерфейса на уровне объектов
- •Получение ссылок на интерфейсы: ключевое слово as
- •Получение ссылок на интерфейсы: ключевое слово is
- •Использование интерфейсов в качестве параметров
- •Использование интерфейсов в качестве возвращаемых значений
- •Массивы интерфейсных типов
- •Явная реализация интерфейсов
- •Проектирование иерархий интерфейсов
- •Множественное наследование посредством интерфейсных типов
Управляющие последовательности
Как и в других основанных на С языках, строковые литералы C# могут содержать различные управляющие последовательности, которые позволяют уточнять то, как символьные данные должны выводиться в выходной поток. Каждая управляющая последовательность начинается с символа обратной косой черты, за которым следует интерпретируемый знак.
Таблица 8. Управляющие последовательности в строковых литералах
За счет добавления к строковому литералу префикса @ можно создавать так называемые дословные строки. Дословные строки позволяют отключать обработку управляющих последовательностей в литералах и выводить значения string в том виде, в каком они есть. Эта возможность наиболее полезна при работе со строками, представляющими пути к каталогам и сетевым ресурсам. Таким образом, вместо использования управляющей последовательности \\ можно написать следующий код:
Добавьте в проект код, иллюстрирующий использование управляющих символов
Итерационные конструкции c#
Все языки программирования предлагают способы для повторения блоков кода до тех пор, пока не будет удовлетворено условие завершения. Каким бы языком вы не пользовались в прошлом, итерационные операторы C# не должны вызывать недоумения или требовать особо подробных объяснений. В C# предоставляются четыре итерационных конструкции:
цикл for;
цикл foreach/in;
цикл while;
цикл do/while.
Цикл for
Если требуется повторять блок кода
фиксированное количество раз, хороший
уровень гибкости предлагает оператор
for. Он позволяет указать, сколько раз
должен повторяться блок кода, а также
задать условие завершения. Ниже
приведен пример применения этого
оператора:
Добавьте в проект метод, выводящий на экран 5 первых членов любой геометрической прогрессии.
Все приемы, освоенные в языках С, C++ и Java, применимы также при создании операторов for в С#. Можно создавать сложные условия завершения, строить бесконечные циклы, циклы в обратном направлении (с помощью операции --) и использовать ключевые слова для переходов goto, continue и break. Цикл foreach
Ключевое
слово foreach в C# позволяет проходить
в цикле по всем элементам контейнера,
не требуя проверки его верхнего
предела. Однако в отличие от цикла
for, цикл foreach будет выполнять проход
по контейнеру только линейным (n+1)
образом (т.е. нельзя выполнять проход
по контейнеру в обратном направлении,
пропускать каждый третий элемент и
т.п.).
Тем не менее, если требуется
просто выполнить проход по коллекции
элемент за элементом, цикл foreach —
именно то, что нужно. Ниже приведены
два примера использования цикла
foreach — один для обхода массива строк
и один для обхода массива целых
чисел. Обратите внимание, что тип
данных, указанный перед ключевым
словом in, представляет тип данных
контейнера.
Добавьте в проект метод, иллюстрирующий данное поведение
Циклы while
и do/while
Итерационную
конструкцию while удобно применять,
когда требуется, чтобы блок операторов
выполнялся до тех пор, пока не будет
удовлетворено условие завершения.
Внутри контекста цикла while необходимо
позаботиться о том, чтобы это условие
действительно удовлетворялось, иначе
получится бесконечный цикл. Ниже
приведен пример, в котором на консоль
выводится сообщение "In while loop"
до тех пор, пока пользователь не
завершит цикл вводом yes в командной
строке:
Добавьте в проект метод, иллюстрирующий данное поведение
Тесно связанным с while является цикл do/while. Подобно простому while, цикл do/while применяется тогда, когда какое-то действие должно выполняться неопределенное количество раз. Разница между этими двумя циклами состоит в том, что цикл do/while гарантирует выполнение соответствующего блока кода хотя бы один раз, в то время как цикл while может его вообще не выполнить, если условие с самого начала оказывается ложным. Конструкции принятия решений и операции равенства/сравнения Теперь, когда вы знаете, как многократно выполнять блок операторов, давайте рассмотрим следующую связанную концепцию — управление потоком выполнения программы. Для изменения хода выполнения программы в C# предлагаются две следующих конструкции:
• оператор if/else;
• оператор switch. Сначала рассмотрим оператор if/else. В отличие от С и C++, в языке C# этот оператор может работать только с булевскими выражениями, но не с произвольными значениями наподобие -1 и 0.
Таблица 9. Операции равенства и сравнения в C#
В операторе if могут также применяться сложные выражения, и он может содержать операторы else, обеспечивая выполнение более сложных проверок. Его синтаксис идентичен аналогам в С (C++) и Java. Для построения сложных выражений в C# используется вполне ожидаемый набор условных операций.
Таблица
10. Условные операции C#
Еще одной
простой конструкцией в С#, предназначенной
для реализации выбора, является
оператор switch. Как и в остальных
основанных на С языках, оператор
switch позволяет организовать выполнение
программы на основе заранее
определенного набора вариантов.
Например, в приведенном ниже методе
Main() для каждого из двух возможных
вариантов выводится свое сообщение
(блок default обрабатывает недопустимый
выбор).
Добавьте в проект метод, иллюстрирующий работу switch
Одна из замечательных особенностей оператора switch в C# заключается в том, что помимо числовых значений он также позволяет производить вычисления со строковыми данными. Ниже для примера приведена модифицированная версия предыдущего оператора switch (обратите внимание, что при этом синтаксический разбор пользовательских данных в числовые значения не требуется).
