Классы и объекты C#: перегрузка методов

О том, что такое методы C# и как их создавать мы уже поговорили, научились создавать методы классов и использовать их для доступа к свойствам. Однако, иногда бывает необходимо создать создать более одного метода с одним и тем же именем, но различным набором параметров. В практике программирования такой подход называется перегрузкой методов (method overloading).

С перегрузкой методов как таковой мы уже сталкивались, когда создавали различные конструкторы для нашего первого класса. В языке C# мы можем объявить и создать в классе несколько методов с одним и тем же именем, но различающейся сигнатурой.

Сигнатура метода C#

В C# сигнатура метода складывается из следующих элементов:

  1. Имя метода
  2. Количество и порядок параметров
  3. Типы параметров
  4. Модификаторы параметров

При этом при перегрузке метода его имя не меняется. Например,вернемся к нашему классу Building и создадим метод, который линейно увеличивает все три измерения здания (длину, ширину и высоту):

class Building
 {
     //код с описанием свойств не показан в целях сокращения объема кода
     //описание свойств класса см. https://csharp.webdelphi.ru/klassy-i-obekty-c-svojstva/
     public void ExpandSize(int width, int length, int height)
     {
         Width += width;
         Length += length;
         Height += height;
     }
     //здесь прочие свойства, конструкторы и методы класса
 }

у этого метода будет следующая сигнатура: ExpandSize(int, int, int). Теперь перейдем к перегрузке методов C#.

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

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

    internal class Building
    {
        public double width;
        public double length;
        double height;

        public void ExpandSize(int width, int length, int height)
        {
            Width += width;
            Length += length;
            Height += height;
        }

        public void ExpandSize(double width, double length, double height)
        {
            Width += width;
            Length += length;
            Height += height;
        }
        //здесь прочие свойства, конструкторы и методы класса
     }

 

Также, мы можем поменять количество параметров:

//перегруженный метод
public void ExpandSize(double width, double length)
{
    Width += width;
    Length += length;
}

Теперь у нас в классе имеется три метода изменения размеров здания, которые имеют следующие сигнатуры:

  • ExpandSize(int, int, int)
  • ExpandSize(double, double, double)
  • ExpandSize(double, double)

Использование перегруженных методов

Перегруженные методы используются точно  также, как и любые другие методы. При выборе того или иного метода Visual Studio подскажет есть ли у метода перегрузки и укажет их количество. Например, вот так будет выглядеть редактор кода Visual Studio при выборе нашего метода:

Чтобы воспользоваться одной из перегрузок метода, мы можем полностью написать имя метода и, поставив после названия метода круглую скобку (выбрать необходимую перегрузку из списка:

Итого

Сегодня мы познакомились с такими понятиями как сигнатура метода C# и перегрузка методов. Перегрузка методов  C# позволяет создавать в классе методы с одинаковым именем, но различающейся сигнатурой.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии