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

Перегрузка методов
В этой статье я доступным языком расскажу о механизме перегрузки методов в C#. О том, что из себя представляет данных механизм, как и когда им пользоваться. Методы в C#, это подпрограммы, которые создаются для многократного выполнения однотипных действий. Часто, программисту приходится сталкиваться с ситуациями, когда необходимо выполнять однотипные действия над разными по типу входными параметрами, или над разным количеством параметров… Представим, что нам нужно написать метод, который принимает два целочисленных аргумента и возвращает их сумму. Выглядеть этот метод может примерно так:
//Получает два целых числа и возвращает их сумму static int Sum(int aFirstArg, int aSecondArg) { return aFirstArg + aSecondArg; }
И все бы ничего, но нам может понадобиться создать еще один метод, который принимает в качестве параметров не целые числа, а вещественные, но выполняет ту же функцию, или метод, который принимает не два, а три параметра. В таком случае, нам нужно придумать для каждого такого метода свое, уникальное и более или менее соответствующее название! А это уже как минимум, напрягает программиста, который склонен решать какие-то практические задачи, а не выбирать имена методам… Так вот, механизм перегрузки методов избавляет программиста от подобных проблем, а именно, позволяет создавать методы с одним и тем же именем, но с разным списком аргументов. Причем отличаться обязательно должны именно аргументы методов, возвращаемое значение тут не учитывается.
Отличаться списки аргументов должны либо типами аргументов, либо количеством аргументов, ну или и тем, и другим, но не просто именами аргументов.
Вот пример допустимой перегрузки метода «Sum»:
//Получает два целых числа и возвращает их сумму static int Sum(int aFirstArg, int aSecondArg) { return aFirstArg + aSecondArg; } //Получает три целых числа, и возвращает их сумму static int Sum(int aFirstArg, int aSecondArg, int aThirdArg) { return aFirstArg + aSecondArg + aThirdArg; } //Получает два вещественных числа и возвращает их сумму static double Sum(double aFirstArg, double aSecondArg) { return aFirstArg + aSecondArg; }
А вот так уже нельзя перегружать тот же метод:
//Получает два целых числа и возвращает их сумму static int Sum(int aFirstArg, int aSecondArg) { return aFirstArg + aSecondArg; } //Так перегружать метод Sum нельзя static long Sum(int aFirstArg, int aSecondArg) { return aFirstArg + aSecondArg; } //Так перегружать метод Sum нельзя static int Sum(int aAgr1, int Arg2) { return aAgr1 + Arg2; }
А всё это по тому, что компилятор «смотрит» на количество и типы аргументов методов (не учитывая имена аргументов и возвращаемое значение). И все это для того, чтобы компилятор однозначно «понимал», какой конкретно метод нужно вызывать в определенной ситуации. Если Вы вызовете метод «Sum», передав туда два целых числа, то вызовется первый метод, а если передадите два вещественных числа, то уже третий.
Перегрузка методов – одна из форм полиморфизма. Полиморфизм – один из основных принципов ООП, хотя и не самая крутая.
Таким образом, программист получает дополнительные возможности при создании методов, но нужно помнить, что иметь возможность – еще не значит обязательно ею пользоваться. Иногда лучше создать отдельный метод со своим уникальным именем, хотя, иногда – это только иногда… Но в любом случае, знать, что такое перегрузка методов и как её использовать нужно непременно!
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.