Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekcia5.doc
Скачиваний:
13
Добавлен:
20.03.2016
Размер:
340 Кб
Скачать
☆

4. Перегрузка методов

В С# два и более методов в пределах одного класса могут иметь одинаковые имена при условии, что объявления параметров в методах различаются. Необходимо, чтобы в методах были указаны параметры различных типов, или методы должны различаться количеством параметров. В этом случае метлы называются перегруженными, а процесс определения метода с таким же именем называется перегрузкой метода. Перегрузка методов является одним из способов реализации полиморфизма в С#.

В общем случае для перегрузки метода достаточно объявить другую его версию, а компилятор позаботится обо всем остальном. Безусловно, перегружаемые методы могут отличаться и по типу возвращаемого значения, но этого недостаточно, чтобы два метода можно было считать различными. Типы возвращаемых значений не содержат достаточного количества информации для того, чтобы компилятор мог определить, какой из методов необходимо использовать. При вызове перегружаемого метода выполняется тот метод, параметры которого совпадают с аргументами.

При перегрузке методов также могут использоваться молификагоры ret и out.

Перегрузка методой поддерживает полиморфизм, поскольку является одним из способов реализации в С# принципа «один интерфейс, множество методов». В тех языках, которые не поддерживают перегрузку методов, каждому методу необходимо присвоим, уникальное имя. Но довольно часто возникает ситуация, когда требуется применить один метод для различных типов данных. Рассмотрим функцию возврата абсолютного значения. В языках, не поддерживающих перегрузку, имеется три и более версий такой функции с немного отличающимися именами. Так, в С функция abs() возвращает абсолютное значение целого числа, функция labs()- - абсолютное значение длинного целого числа, а функция fabs() – абсолютное значение числа с плавающей точкой. Поскольку в С перегрузка не поддерживается, каждая функция должна иметь, собственное имя, хотя эти функции аналогичны. Такой подход очень усложняет работу: несмотря на то, что основные действия, выполняе­мые каждой функцией, одинаковы, программисту все равно необходимо помнить три имени. В С# подобная ситуация исключена, так как все методы, предназначенные для вычисления абсолютного значения, могут иметь одно имя. Стандартная библио­тека классов в С# содержит метод Abs(), возвращающий абсолютное значение. Он перегружается классом System.Math для обработки всех числовых типов. А компилятор, исходя из типа аргумента, определяет, какую версию метода Abs() следует вызвать.

Преимущество перегрузки заключается к том, что она позволяет, используя общее имя, получать доступ к методам, выполняющим одинаковые действия с различными типами данных. Таким образом, имя Abs представляет общее выполняемое действие. Выбор необходимой версии метода для указанного типа данных производится ком­пилятором, программист же обязан помнить лишь общее действие, выполняемое данным методом. Благодаря реализации полиморфизма вместо нескольких имен используется только одно. Этот пример с методом Abs достаточно простой, но использование перегрузки позволяет решить гораздо более сложные задачи.

Для перегрузки метод должен отличаться от своей предыдущей версии по типу и/иди количеству параметров.

Тип возвращаемого значения перегруженных методов может отличаться, но это не является необходимым условием для перегрузки метода.

Когда отсутствует прямое совпадение типов между набором аргументов и набором параметров, используется метод с наиболее близко совпадающим набором аргументов, если типы этих аргументов могут быть автоматически преобразованы к типам, имеющим параметры.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]