Перегруженные методы C#

Перегруженные методы C#

Всем доброго времени суток, на связи Алексей Гулынин. В прошлой статье мы узнали про именованные параметры в C#. В данной статье поговорим про перегруженные методы в C#. Напомню, что метод — это функция, привязанная к объекту или к классу, если это статическая функция. Перегруженным методом (overloaded method) называется несколько методов определенных в одном классе, с одинаковым именем, но с разным набором параметров. Давайте на примере посмотрим работу перегруженных методов:

class Program
{
	static void Main(string[] args)
	{
		startRun();
		startRun(5);
		startRun(5, 14);
		Console.ReadLine();
	}

	static void startRun()
	{
		Console.WriteLine("Вы бежите");
	}

	static void startRun(int distance)
	{
		Console.WriteLine("Вы пробежали {0} км", distance);
	}

	static void startRun(int distance, int seconds)
	{
		Console.WriteLine("Вы пробежали {0} км за {1} секунд", distance, seconds);
	}
}

В данном случае мы создали 3 метода в одном и том же классе Program с одинаковым именем, но с разным набором параметров. Это и есть перегрузка методов. Как компилятор понимает какой метод нужно вызывать? Компилятор вызывает метод не на основе его (метода) имени, а на основе сигнатуры. В сигнатуру входят: имя метода + набор типов параметров. Когда мы пишем имя метода — компилятор смотрит какие параметры мы передаём ему, и в зависимости от этого, вызывает соответствующий метод. Хочу обратить внимание, что разными должны быть именно ТИПЫ параметров. Если мы сделаем следующим образом, то возникнет ошибка:

static void startRun(int distance)
{
	Console.WriteLine("Вы пробежали {0} км", distance);
}
static void startRun(int distance1)
{
	Console.WriteLine("Вы пробежали {0} км", distance1);
}

Здесь название формальных параметров у метода отличается, но тип одинаковый. В обоих случаях int, поэтому и возникнет ошибка на этапе компиляции. Названия параметров важны только внутри тела метода.

Многие системные методы используют перегрузку.

Если вы наберёте Console.Writeline(, то далее IntelliSense предложит варианты использования данного метода. Как мы видим у нас есть 19 вариантов. Таким образом в классе Console существует 19 перегруженных методов WriteLine(). Стрелками вниз — вверх можно посмотреть все эти методы:

перегруженные методы в C#

В данной небольшой статье вы узнали про перегруженные методы в C#.

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.


Комментарии:

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *