Полное руководство по языку программирования С# 14 и платформе .NET 10 / Классы, структуры и пространства имен

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

Начальный ⏱ 3 мин чтения 👁 2 🕓 обновлено 11.08.2026

Иногда возникает необходимость создать один и тот же метод, но с разным набором параметров. И в зависимости от имеющихся параметров применять определенную версию метода. Такая возможность еще называется перегрузкой методов (method overloading).

И в языке C# мы можем создавать в классе несколько методов с одним и тем же именем, но разной сигнатурой. Что такое сигнатура? Сигнатура складывается из следующих аспектов:

  • Имя метода

  • Количество параметров

  • Типы параметров

  • Порядок параметров

  • Модификаторы параметров

Но названия параметров в сигнатуру НЕ входят. Например, возьмем следующий метод:


public int Sum(int x, int y) 
{ 
	return x + y;
}

У данного метода сигнатура будет выглядеть так: Sum(int, int)

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

  • Количеству параметров

  • Типу параметров

  • Порядку параметров

  • Модификаторам параметров

Например, пусть у нас есть следующий класс:


class Calculator
{
	public void Add(int a, int b)
    {
		int result = a + b;
        Console.WriteLine($"Result is {result}");
	}
    public void Add(int a, int b, int c)
    {
		int result = a + b + c;
        Console.WriteLine($"Result is {result}");
    }
    public int Add(int a, int b, int c, int d)
    {
		int result = a + b + c + d;
        Console.WriteLine($"Result is {result}");
        return result;
	}
	public void Add(double a, double b)
	{
		double result = a + b;
        Console.WriteLine($"Result is {result}");
	}
}

Здесь представлены четыре разных версии метода Add, то есть определены четыре перегрузки данного метода.

Первые три версии метода отличаются по количеству параметров. Четвертая версия совпадает с первой по количеству параметров, но отличается по их типу. При этом достаточно, чтобы хотя бы один параметр отличался по типу. Поэтому это тоже допустимая перегрузка метода Add.

То есть мы можем представить сигнатуры данных методов следующим образом:


Add(int, int)
Add(int, int, int)
Add(int, int, int, int)
Add(double, double)

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


Calculator calc = new Calculator();
calc.Add(1, 2); // 3
calc.Add(1, 2, 3); // 6
calc.Add(1, 2, 3, 4); // 10
calc.Add(1.4, 2.5); // 3.9

Консольный вывод:

Result is 3
Result is 6
Result is 10
Result is 3.9

Также перегружаемые методы могут отличаться по используемым модификаторам. Например:


void Increment(ref int val)
{
	val++;
	Console.WriteLine(val);
}

void Increment(int val)
{
	val++;
	Console.WriteLine(val);
}

В данном случае обе версии метода Increment имеют одинаковый набор параметров одинакового типа, однако в первом случае параметр имеет модификатор ref. Поэтому обе версии метода будут корректными перегрузками метода Increment.

А отличие методов по возвращаемому типу или по имени параметров не является основанием для перегрузки. Например, возьмем следующий набор методов:


int Sum(int x, int y)
{
	return x + y;
}
int Sum(int number1, int number2)
{
	return number1 + number2;
}
void Sum(int x, int y)
{
	Console.WriteLine(x + y);
}

Сигнатура у всех этих методов будет совпадать:


Sum(int, int)

Поэтому данный набор методов не представляет корректные перегрузки метода Sum и работать не будет.

Проверь себя

📋 Тест по теме «Перегрузка методов» Тест по теме

Практические задания

Лёгкое Ручная проверка Заполните пропуск в коде (1)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

public int _____(int x, int y) 
{ 
	return x + y;
}
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (2)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

class Calculator
{
	public void _____(int a, int b)
    {
		int result = a + b;
        Console.WriteLine($"Result is {result}");
	}
    public void Add(int a, int b, int c)
    {
		int result = a + b + c;
        Console.WriteLine($"Result is {result}");
    }
    public int Add(int a, int b, int c, int d)
    {
		int result = a + b + c + d;
        Console.WriteLine($"Result is {result}");
        return result;
	}
	public void Add(double a, double b)
	{
		double result = a + b;
        Console.WriteLine($"Result is {result}");
	}
}
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (3)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

_____(int, int)
Add(int, int, int)
Add(int, int, int, int)
Add(double, double)
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (4)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

_____ calc = new Calculator();
calc.Add(1, 2); // 3
calc.Add(1, 2, 3); // 6
calc.Add(1, 2, 3, 4); // 10
calc.Add(1.4, 2.5); // 3.9
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (5)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

void Increment(ref int val)
{
	val++;
	_____.WriteLine(val);
}

void Increment(int val)
{
	val++;
	Console.WriteLine(val);
}
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (1)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

public int _____(int x, int y) 
{ 
	return x + y;
}
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (2)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

class Calculator
{
	public void Add(int a, int b)
    {
		int result = a + b;
        _____.WriteLine($"Result is {result}");
	}
    public void Add(int a, int b, int c)
    {
		int result = a + b + c;
        Console.WriteLine($"Result is {result}");
    }
    public int Add(int a, int b, int c, int d)
    {
		int result = a + b + c + d;
        Console.WriteLine($"Result is {result}");
        return result;
	}
	public void Add(_____ a, double b)
	{
		double result = a + b;
        Console.WriteLine($"Result is {result}");
	}
}
Войдите, чтобы отправить решение
Среднее Ручная проверка Расставьте строки кода в правильном порядке
+20 XP

Строки кода из примера этого урока перемешаны. Впишите их в правильном порядке, каждую строку — с новой строки.

public int Sum(int x, int y)
	return x + y;
}
{
Войдите, чтобы отправить решение
Сложное Ручная проверка Объясните и модифицируйте пример из урока «Перегрузка методов»
+30 XP

Опишите своими словами, что делает приведённый пример кода из урока «Перегрузка методов», и предложите одно осмысленное изменение (например, другое входное значение или дополнительное условие). Приведите итоговый код.

public int Sum(int x, int y) 
{ 
	return x + y;
}
Войдите, чтобы отправить решение
Сложное Ручная проверка Найдите потенциальную проблему в коде урока «Перегрузка методов»
+30 XP

Изучите приведённый фрагмент кода и опишите, при каких входных данных или условиях он может сработать не так, как ожидается (граничный случай, отсутствие проверки и т.п.). Предложите исправленный вариант.

class Calculator
{
	public void Add(int a, int b)
    {
		int result = a + b;
        Console.WriteLine($"Result is {result}");
	}
    public void Add(int a, int b, int c)
    {
		int result = a + b + c;
        Console.WriteLine($"Result is {result}");
    }
    public int Add(int a, int b, int c, int d)
    {
		int result = a + b + c + d;
        Console.WriteLine($"Result is {result}");
        return result;
	}
	public void Add(double a, double b)
	{
		double result = a + b;
        Console.WriteLine($"Result is {result}");
	}
}
Войдите, чтобы отправить решение
Мини-проект Ручная проверка Мини-проект по теме «Перегрузка методов»
+50 XP

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

Войдите, чтобы отправить решение
Домашнее задание Ручная проверка Домашнее задание по теме «Перегрузка методов»
+25 XP

Напишите собственную небольшую программу, применяющую материал темы «Перегрузка методов». Используйте не менее одной конструкции, показанной в примерах урока. Прикрепите код решения и краткое описание того, что он делает.

Войдите, чтобы отправить решение

Обсуждение (0)

Войдите, чтобы оставить комментарий.