- •1 Концепция структурного программирования. Причины появления концепции. Модульность и функции. Ограничения на логические конструкции. Использование оператора goto.
- •Теорема о структурном программировании (Теорема Бёма — Якопини)
- •3 Платформа .Net Framework. Многоязыковое программирование. Кроссплатформенность по. Web-ориентированные приложения.
- •Преимущества технологии динамической компиляции
- •5 Построение приложения Windows в интегрированной среде программирования
- •6 Основные типы данных
- •7 Символы и строки. Символы, строки и массивы строк. Операции над строками
- •8 Структура программы на языке c#. Понятие пространства имен. Иерархия пространств имен. Видимость имен.
- •9 Операторы. Основные языка с#. Арифметические и логические операторы. Бинарные и унарные операторы. Составные операторы. Понятие перегрузки операторов.
- •10 Выражения. Приоритет и ассоциативность операторов. Порядок вычисления выражения.
- •11 Преобразования типов. Иерархия численных типов. Явное и неявное преобразование типов. Возможные ошибки.
- •12 Тема: Модификаторы доступа языка c#. Необходимые знания: Назначение и функции модификаторов private, public, protected, internal, protected internal, private protected.
- •13 Выбор вариантов.
- •If (Условие)
- •14 Циклы.
- •15 Классы памяти
- •16 Функции в языке с#
- •17 Массивы. Создание и инициализация. Ссылки на массив. Двухмерные и многомерные массивы. Инициализация массивов. Невыровненные массивы.
- •18 Понятие класса. Определение класса и экземпляр класса. Данные и методы. Ключевое слово partial.
- •19 Создание объекта класса.
- •20 Деструкторы и «сборка мусора». Оператор «new». Резервирование и освобождение памяти. Деструкторы и «сборка мусора».
- •21 Полиморфизм и перегрузка операторов. Перегрузка унарных и бинарных операторов. Семантика перегрузки операторов в с#.
- •Понятие полиморфизма и шаблоны. Назначение и преимущества использования шаблонов. Параметры универсального типа.
- •23 Свойства c# (Понятие инкапсуляции и свойства в c#. Использование ключевых слов «get» и «set». Преимущества использования свойств.)
- •24 Механизм исключений (Назначение исключений. Основные категории исключений. Ключевые слова try, catch и finally, throw.)
- •25 Наследование в c#. Понятие наследования в c#. Механизм наследования. Базовый и производный классы. Наследование и модификаторы доступа.
10 Выражения. Приоритет и ассоциативность операторов. Порядок вычисления выражения.
Комбинации операндов (переменных) и операций составляются в выражения. У разных операций будет разный порядок выполнения, что будет определяться двумя понятиями:
Приоритет – показатель, в соответствии с которым определяется порядок выполнения операций разного приоритета в выражении. Чем выше приоритет операции, тем раньше она производится в выражении. К примеру, умножение имеет более высокий приоритет, чем сложение, поэтому в выражении с этими двумя операторами в первую очередь будет произведено умножение, а потом сложение. Есть отдельная таблица с приоритетами для всех операций. В самом верху таблицы находятся операции типа выбора элемента из массива, а в самом её низу находятся условные операции и, упоминаемые только в том случае, если вы знаете, что это такое, операции для работы с лямбда-выражениями.
Ассоциативность – показатель, определяющий порядок выполнения операций с одинаковым приоритетом. Левая ассоциативность – выполнение операций слева направо, характерна почти для всех операций. Правая ассоциативность – выполнение операций справа налево, характерна только для операторов присвоения (х = у = а имеет вид х = (у = а)), оператора объединения со значением null (?? и ??= для возвращения операнда, если его значение не null), лямбда-выражения и условные операторы ?: (ставится после логического выражения с выбором из двух выходов для выполнения и невыполнения условия).
Стоит ещё указать, что помимо этих двух параметров порядок выполнения операций определяется наличием или отсутствием в выражении скобок. При ограничении выражения в скобки ограниченная скобками часть будет выполняться первой, обходя приоритет операторов.
Операнды (переменные) в выражении тоже имеют порядок, по которому они определяются. Операнды определяются самыми первыми слева направо по порядку выполнения операций. При появлении скобок операнды определяются слева направо до этих скобок, после чего определяются операнды внутри скобок, выполняются операции внутри скобок, а затем продолжается определение операндов.
Для примера порядок выполнения операций:
Выражение |
Порядок |
|
|
|
|
|
|
|
|
11 Преобразования типов. Иерархия численных типов. Явное и неявное преобразование типов. Возможные ошибки.
Явное и неявное преобразование типов. Возможные ошибки.
Поскольку код C# является статически типизированным во время компиляции, после объявления переменной ее нельзя объявить повторно или назначить ей значения другого типа, если этот тип невозможно неявно преобразовать в тип переменной. Например, string невозможно неявно преобразовать в int. Поэтому после объявления i как int нельзя назначить ей строку "Hello", как показано в следующем коде:
Тем не менее иногда может потребоваться скопировать значение в переменную или параметр метода другого типа. Например, может потребоваться передать целочисленную переменную в метод, параметр которого имеет тип double. Или может понадобиться присвоить переменную класса переменной типа интерфейса. Такого рода операции называются преобразованиями типа. В C# можно выполнять следующие виды преобразований.
Неявные преобразования. Специальный синтаксис не требуется, так как преобразование всегда завершается успешно и данные не будут потеряны. Примеры включают преобразования из меньших в большие целочисленные типы и преобразования из производных классов в базовые классы.
В случае с расширяющими преобразованиями компилятор за нас выполнял все преобразования данных, то есть преобразования были неявными (implicit conversion). Такие преобразования не вызывают каких-то затруднений. Тем не менее стоит сказать пару слов об общей механике подобных преобразований.
Если производится преобразование от безнакового типа меньшей разрядности к безнаковому типу большой разрядности, то добавляются дополнительные биты, которые имеют значени 0. Это называется дополнение нулями или zero extension.
1 2 |
byte a = 4; // 0000100 ushort b = a; // 000000000000100 |
Если производится преобразование к знаковому типу, то битовое представление дополняется нулями, если число положительное, и единицами, если число отрицательное. Последний разряд числа содержит знаковый бит - 0 для положительных и 1 для отрицательных чисел. При расширении в добавленные разряды компируется знаковый бит.
Рассмотрим преобразование положительного числа:
1 2 |
sbyte a = 4; // 0000100 short b = a; // 00000000000010 |
Преобразование отрицательного числа:
1 2 |
sbyte a = -4; // 1111100 short b = a; // 111111111111100 |
Явные преобразования (приведения). Для явных преобразований требуется выражение приведения. Приведение требуется, если в ходе преобразования данные могут быть утрачены или преобразование может завершиться сбоем по другим причинам. Типичными примерами являются числовое преобразование в тип с меньшей точностью или меньшим диапазоном и преобразование экземпляра базового класса в производный класс.
Иерархия численных типов.
В C# определены девять целочисленных типов: char, byte, sbyte, short, ushort, int, uint, long и ulong. Но тип char применяется, главным образом, для представления символов и поэтому рассматривается отдельно. Остальные восемь целочисленных типов предназначены для числовых расчетов. Ниже представлены их диапазон представления чисел и разрядность в битах:
Простые численные: sbytе, byte, short, ushort, int, uint, long, ulong, char, float, double , bool, decimal
Интегральные типы. C # поддерживает девять целочисленных типов: sbyte, byte, short, ushort, int, uint, long, ulong, и char.
C # поддерживает два типа с плавающей запятой: floatи double.
Десятичный тип decimal.
Тип Bool представляет булевы логические величины. Возможные значения типа boolявляются trueи false.
Тип перечисления – это отдельный тип с именованными константами. Каждый тип перечисления имеет базовый тип, который должен быть byte, sbyte, short, ushort, int, uint, longили ulong.
Обнуляемые типы. Тип, допускающий значение NULL, может представлять все значения своего базового типа плюс дополнительное значение NULL. Записывается тип, допускающий значение NULL T, где T- базовый тип.