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», передав туда два целых числа, то вызовется первый метод, а если передадите два вещественных числа, то уже третий.

Перегрузка методов – одна из форм полиморфизма. Полиморфизм – один из основных принципов ООП, хотя и не самая крутая.

Таким образом, программист получает дополнительные возможности при создании методов, но нужно помнить, что иметь возможность – еще не значит обязательно ею пользоваться. Иногда лучше создать отдельный метод со своим уникальным именем, хотя, иногда – это только иногда… Но в любом случае, знать, что такое перегрузка методов и как её использовать нужно непременно!

Добавить комментарий