- •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#. Механизм наследования. Базовый и производный классы. Наследование и модификаторы доступа.
21 Полиморфизм и перегрузка операторов. Перегрузка унарных и бинарных операторов. Семантика перегрузки операторов в с#.
Перегруженными наз-ся два и более метода с одинаковым именем,но с разл.списками аргументов.
Перегрузка.Часто бывает,что вып-ся одно и тоже действие(метод),но с разн. типами аргументов или их кол-вом.В нек.языках программ-я,чтобы решить дан.проблему приходилось описать все методы с новыми именами,в С# для этого есть перегрузка. Перегрузка операторов тесно связана с перегрузкой методов. Для перегрузки операторов исп-ся ключ.слово operator, позволяющее создать операторный метод,кот.опр-т действие оператора,связанное с его классом.Сущ-т 2 формы методов operator:
одна исп-ся для унарных операторов,а другая-для бинарных
Здесь эл-т ор- это оператор(например "+" или "/"),кот. перегружается.Эл-т тип_возврата-это тип зн-я, возвращ-го при вып-ии зад.операции.Несмотря на то, что можно выбрать любой тип,тип возвращ-го зн-я чаще всего будет совпадать с типом класса,для кот.этот оператор перегружается.Такая корреляция облегчает исп-е перегр. оператора в выр-ях.Для унарных операторов операнд передается в эл-те операнд,а для бинарных-в эл-тах операнд1 и операнд2.Для унарных операторов тип операнда должен совпадать с классом,для кот.определен оператор.Что касается бинарных операторов, то тип хотя бы одного операнда должен совпадать с соответств-им классом.Таким образом,С#-операторы нельзя перегружать для классов, не созданных вами.Например,вы не можете перегрузить оператор "+" для типов int или string.
И последнее: параметры операторов не должны исп-ть модификатор ref или out.
Понятие полиморфизма и шаблоны. Назначение и преимущества использования шаблонов. Параметры универсального типа.
Полиморфизм просто означает способность использовать тип, не зная об этом. Вместо того, чтобы использовать конкретный тип, полиморфизм опирается на прототип какой-то формы, чтобы определить, какие типы он принимает. Любые типы, которые соответствуют этому прототипу, принимаются.
Универсальные шаблоны позволяют точно настроить метод, класс, структуру или интерфейс в соответствии с типом обрабатываемых данных. Например, вместо использования класса Hashtable, который разрешает ключам и значениям иметь любой тип, можно использовать универсальный класс Dictionary<TKey,TValue> и указать типы, разрешенные для ключа и значения. Помимо прочего, преимуществами универсальных шаблонов являются улучшенная возможность многократного использования кода и сохранения типов.
Преимущества универсальных шаблонов
Использование универсальных коллекций и делегатов предоставляет целый ряд преимуществ.
Типобезопасность. Универсальные шаблоны позволяют передать компилятору обязанности обеспечения типовой безопасности. Нет необходимости написания кода для проверки правильности типа данных, так как проверка происходит во время компиляции. Уменьшается потребность приведения типов и вероятность ошибок во время выполнения.
Объем кода уменьшен и поддерживает многократную реализацию. Нет необходимости наследования базового типа и преобладающих членов. Например, LinkedList<T> готов к немедленному использованию.
Повышенная производительность. Универсальные типы коллекций имеют более высокую производительность при хранении и управлении типами значений, поскольку отсутствует необходимость их упаковки.
Универсальные делегаты поддерживают типобезопасные обратные вызовы без необходимости создания нескольких классов делегатов. Например, универсальный делегат Predicate<T> позволяет создать метод, который реализует собственные условия поиска для определенного типа, и использовать ваш метод с методами типа Array , такими как Find, FindLastи FindAll.
Универсальные шаблоны упрощают динамически создаваемый код. Универсальные делегаты можно также использовать в динамически создаваемом коде без необходимости создания типа делегата. Это увеличивает количество ситуаций, в которых можно использовать облегченные динамические методы вместо создания целых сборок.