Перегрузка операций состоит в изменении смысла операции при использовании его с определенным классом.
Перегрузка операций
Наиболее распространенным видом перегрузки методов является перегрузка конструкторов в классе.
Перегрузка методов – это один из способов, которым достигается полиморфизм в языке С#. Две и более функции могут иметь одно и то же имя, а отличаться набором аргументов в интерфейсе (описании).
Полиморфизм – позволяет использовать один и тот же интерфейс при реализации целого круга различных действий.
Как известно, в языке С# тип переменной определяет набор значений, которые она может хранить, а также набор операций, которые можно выполнять над этой переменной. Например, над значением переменной типа int программа может выполнять сложение, вычитание, умножение и деление. С другой стороны, использование оператора “плюс” для сложения двух экземпляров реализованного программистом класса лишено смысла.
Когда в программе определяется класс, то по существу определяется новый тип данных. Тогда язык C# позволяет определить операции, соответствующие этому новому типу данных.
Например, пусть имеется:
myclass a,bc;…//a,b,c-экземпляры класса myclass
c=a+b; //перегруженная операция сложения для класса myclass
Перегрузка операций обычно применяется для классов, описывающих математические или физические понятия, то есть таких классов, для которых требуется выполнить соответствующие операции.
Общий синтаксис объявления перегруженной операции:
тело операции-действия, которые выполняются при использовании операции в выражении
Перегружать можно только стандартные операции.
Алгоритм перегрузки операции:
1. Определить класс, которому данная операция будет назначена.
2. Для перегрузки операций используется ключевое слово operator.
3. Переопределяя операцию, необходимо указать метод, который C# вызывает каждый раз, когда класс использует перегруженную операцию. Этот метод, в свою очередь, выполняет соответствующую операцию.
Правила перегрузки операции:
1. Операция должна быть объявлена как public static
2. Параметры в операцию должны передаваться по значению (не ref, не out)
3. Двух одинаковых перегруженных операций в классе не должно быть
Если программа перегружает операцию для определенного класса, то смысл этой операции изменяется только для указанного класса, оставшаяся часть программы будет продолжать использовать эту операцию для выполнения ее стандартных действий.
К унарным операциям, которые можно перегружать в языке С# относятся:
o унарные + и –
o логическое !,
o ++,--
o true, false – обычно перегружаются для типов SQL