Обзор по перегрузке в C #

В «Перегрузке» в C # полиморфизм представляет собой концепцию объектно-ориентированного программирования, которая определяет способность объекта, переменной или метода принимать несколько форм во время компиляции / выполнения. Факторы реального времени, такие как данные, параметры, возвращаемый объект и т. Д., Определяют, какую форму примет объект / метод / переменная. Это позволяет программисту кодировать более общий, а не конкретный код. Например, вы едите фрукты. То, как вы едите фрукты, зависит от фруктов, предоставляемых вам в режиме реального времени. Вы сразу же едите яблоко, а перед едой очищаете банан. Просто.

Что такое перегрузка метода в C #?

Перегрузка метода - это реализация концепции полиморфизма во время компиляции. Разработчики могут определять похожие методы под одним и тем же именем, различаясь либо количеством аргументов, порядком аргументов, либо типом аргументов. В примере с фруктами нет необходимости определять отдельные методы для каждого фрукта (есть яблоки, есть бананы и т. Д.). Вы можете использовать одно и то же имя, чтобы есть фрукты и передавать ему различные параметры. Компилятор автоматически вызовет соответствующий метод.

Давайте возьмем перспективу C # сейчас. В самых простых терминах перегрузка методов в C # - это когда у вас есть два или более методов с одинаковым именем, но разными сигнатурами. Это может быть достигнуто различными способами:

  • Разное количество параметров.
  • Различные типы параметров.
  • Разный порядок параметров.
  • Необязательные параметры.
  • Именованные аргументы.

Как перегрузка метода работает в C #?

Итак, как вызывается соответствующий метод на основе аргументов / параметров? Что ж, компилятор проверяет каждое определение метода во время компиляции и связывает вызовы метода с соответствующими определениями. Если есть два метода с одинаковым именем, компилятор проверяет сигнатуру методов и связывает соответствующее определение с вызовом. Даже если подписи не могут разрешить неоднозначность, компилятор ищет неявное преобразование аргументов для соответствия сигнатурам. Если неявное преобразование приводит к совпадению подписи, привязка выполняется. Если нет, компилятор генерирует ошибку.

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

Типы перегрузки методов в C #

Здесь мы обсудим различные типы перегрузки методов в C #, которые приведены ниже:

1. Различное количество параметров

Первая и самая простая категория перегрузки методов - это когда методы имеют разное количество параметров в своих сигнатурах.

Код

Пример, приведенный ниже, довольно прост и понятен.

using System;
public class Program
(
public static void Main()
(
Func(10);)
public static void Func(int a)
(
Console.WriteLine("Single Parameter");
)public static void Func(int a, int b)
(
Console.WriteLine("Multiple Parameters");
)
)

Выход:

2. Другой тип параметров

Когда сигнатуры метода имеют параметр (ы), которые различаются по типам. Количество параметров может или не может быть одинаковым.

Пример 1

В приведенном ниже примере оба метода ожидают один аргумент. Таким образом, на основе типа аргумента, переданного во время вызова метода, компилятор связывает соответствующее определение метода.

Код

using System;
public class Program
(
public static void Main()
(
Func("Hello World");
)
public static void Func(int a)
(
Console.WriteLine("Integer Parameter");
)
public static void Func(string b)
(Console.WriteLine("String Parameter");
)
)

Выход:

Пример 2

Теперь давайте дадим компилятору кое-что подумать. Мы бы перегружали метод типа double и float. Мы знаем, что целое число всегда может быть неявно преобразовано в тип с плавающей точкой, а также в двойной тип.

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

Код

using System;
public class Program
(
public static void Main()
(
Func(10);
)
public static void Func(double a)
(
Console.WriteLine("Double Parameter");
)
public static void Func(float b)
(
Console.WriteLine("Floating Point Parameter");
)
)

Выход:

3. Различный порядок параметров

Когда количество и тип аргументов одинаковы, но порядок их передачи отличается.

Пример 1

Пример ниже довольно прост.

Код

using System;
public class Program
(
public static void Main()
(
Func(10, 0.1);
)
public static void Func(int a, double b)
(
Console.WriteLine("Int-Double Parameters");
)
public static void Func(double a, int b)
(
Console.WriteLine("Double-Int Parameter");
)
)

Выход:

Пример 2

Что произойдет, когда мы передадим два целочисленных аргумента в приведенном выше примере? Давай выясним.

Код

Func(10, 1);

Выход:

4. Необязательные параметры

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

Примечание. Это имеет приоритет перед неявным преобразованием.

Позвольте нам понять это на примере.

пример

В приведенном ниже примере мы предоставляем компилятору два варианта. Либо он может неявно преобразовать аргумент в соответствие сигнатуре метода. Или он может передать значение по умолчанию необязательного аргумента. Компилятор предпочитает последний подход.

Код

using System;
public class Program
(
public static void Main()
(
Func(10);
)
public static void Func(int a, int b = 1)
(
Console.WriteLine("Int-Int Parameters");
)
public static void Func(double a)
(
Console.WriteLine("Double Parameter");
)
)

Выход:

5. Названные аргументы

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

пример

В приведенном ниже примере мы указываем компилятору вызывать определенный метод, передавая имя параметра. Затем компилятор приостанавливает свою логику определения наиболее подходящего метода.

Код

using System;
public class Program
(
public static void Main()
(
Func(b: 10);
)
public static void Func(int a)
(
Console.WriteLine("Int-Int Parameters");
)
public static void Func(double b)
(
Console.WriteLine("Double Parameter");
)
)

Выход:

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

При перегрузке методов в приложении C # необходимо учитывать следующие правила.

  • Подпись метода должна быть другой. Количество аргументов, тип аргументов или порядок аргументов должны быть разными.
  • Тип возврата методов не играет никакой роли в перегрузке методов.
  • Необязательные параметры имеют приоритет над неявным преобразованием типов при принятии решения, какое определение метода связать.
  • Неявное преобразование типов имеет приоритет над методом родительского класса.
    Упражнение - Чтобы понять это, вот небольшое упражнение для вас. Создайте родительский класс с методом, который ожидает целое число. Наследуйте дочерний класс. Перегрузите метод из родительского класса в дочернем классе, так что метод дочернего класса ожидает аргумент двойного типа. Создайте объект дочернего класса и вызовите перегруженный метод, передавая целое число. Посмотри что получится.

Вывод

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

Рекомендуемые статьи

Это руководство по перегрузке в C #. Здесь мы обсуждаем его метод, как он работает, типы с примером и правилами. Вы также можете просмотреть наши другие предлагаемые статьи, чтобы узнать больше -

  1. C # Пока Loop
  2. C # если заявление
  3. Функции C #
  4. Использование C #
  5. Руководство по перегрузке в C ++
  6. Перегрузка в Java
  7. Перегрузка Python
  8. Перегрузка и переопределение в C #
  9. Преобразование типов в Java с типами и примерами