Скачиваний:
1
Добавлен:
04.09.2023
Размер:
1.17 Mб
Скачать

21 Полиморфизм и перегрузка операторов. Перегрузка унарных и бинарных операторов. Семантика перегрузки операторов в с#.

Перегруженными наз-ся два и более метода с одинаковым именем,но с разл.списками аргументов.

Перегрузка.Часто бывает,что вып-ся одно и тоже действие(метод),но с разн. типами аргументов или их кол-вом.В нек.языках программ-я,чтобы решить дан.проблему приходилось описать все методы с новыми именами,в С# для этого есть перегрузка. Перегрузка операторов тесно связана с перегрузкой методов. Для перегрузки операторов исп-ся ключ.слово operator, позволяющее создать операторный метод,кот.опр-т действие оператора,связанное с его классом.Сущ-т 2 формы методов operator:

одна исп-ся для унарных операторов,а другая-для бинарных

Здесь эл-т ор- это оператор(например "+" или "/"),кот. перегружается.Эл-т тип_возврата-это тип зн-я, возвращ-го при вып-ии зад.операции.Несмотря на то, что можно выбрать любой тип,тип возвращ-го зн-я чаще всего будет совпадать с типом класса,для кот.этот оператор перегружается.Такая корреляция облегчает исп-е перегр. оператора в выр-ях.Для унарных операторов операнд передается в эл-те операнд,а для бинарных-в эл-тах операнд1 и операнд2.Для унарных операторов тип операнда должен совпадать с классом,для кот.определен оператор.Что касается бинарных операторов, то тип хотя бы одного операнда должен совпадать с соответств-им классом.Таким образом,С#-операторы нельзя перегружать для классов, не созданных вами.Например,вы не можете перегрузить оператор "+" для типов int или string.

И последнее: параметры операторов не должны исп-ть модификатор ref или out.

  1. Понятие полиморфизма и шаблоны. Назначение и преимущества использования шаблонов. Параметры универсального типа.

Полиморфизм просто означает способность использовать тип, не зная об этом. Вместо того, чтобы использовать конкретный тип, полиморфизм опирается на прототип какой-то формы, чтобы определить, какие типы он принимает. Любые типы, которые соответствуют этому прототипу, принимаются.

Универсальные шаблоны позволяют точно настроить метод, класс, структуру или интерфейс в соответствии с типом обрабатываемых данных. Например, вместо использования класса Hashtable, который разрешает ключам и значениям иметь любой тип, можно использовать универсальный класс Dictionary<TKey,TValue> и указать типы, разрешенные для ключа и значения. Помимо прочего, преимуществами универсальных шаблонов являются улучшенная возможность многократного использования кода и сохранения типов.

Преимущества универсальных шаблонов

Использование универсальных коллекций и делегатов предоставляет целый ряд преимуществ.

  1. Типобезопасность. Универсальные шаблоны позволяют передать компилятору обязанности обеспечения типовой безопасности. Нет необходимости написания кода для проверки правильности типа данных, так как проверка происходит во время компиляции. Уменьшается потребность приведения типов и вероятность ошибок во время выполнения.

  2. Объем кода уменьшен и поддерживает многократную реализацию. Нет необходимости наследования базового типа и преобладающих членов. Например, LinkedList<T> готов к немедленному использованию.

  3. Повышенная производительность. Универсальные типы коллекций имеют более высокую производительность при хранении и управлении типами значений, поскольку отсутствует необходимость их упаковки.

  4. Универсальные делегаты поддерживают типобезопасные обратные вызовы без необходимости создания нескольких классов делегатов. Например, универсальный делегат Predicate<T> позволяет создать метод, который реализует собственные условия поиска для определенного типа, и использовать ваш метод с методами типа Array , такими как FindFindLastи FindAll.

  5. Универсальные шаблоны упрощают динамически создаваемый код. Универсальные делегаты можно также использовать в динамически создаваемом коде без необходимости создания типа делегата. Это увеличивает количество ситуаций, в которых можно использовать облегченные динамические методы вместо создания целых сборок.