О том, что такое методы C# и как их создавать мы уже поговорили, научились создавать методы классов и использовать их для доступа к свойствам. Однако, иногда бывает необходимо создать создать более одного метода с одним и тем же именем, но различным набором параметров. В практике программирования такой подход называется перегрузкой методов (method overloading).
С перегрузкой методов как таковой мы уже сталкивались, когда создавали различные конструкторы для нашего первого класса. В языке C# мы можем объявить и создать в классе несколько методов с одним и тем же именем, но различающейся сигнатурой.
Сигнатура метода C#
В C# сигнатура метода складывается из следующих элементов:
- Имя метода
- Количество и порядок параметров
- Типы параметров
- Модификаторы параметров
При этом при перегрузке метода его имя не меняется. Например,вернемся к нашему классу 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# позволяет создавать в классе методы с одинаковым именем, но различающейся сигнатурой.