Обзор по перегрузке в 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 #. Здесь мы обсуждаем его метод, как он работает, типы с примером и правилами. Вы также можете просмотреть наши другие предлагаемые статьи, чтобы узнать больше -
- C # Пока Loop
- C # если заявление
- Функции C #
- Использование C #
- Руководство по перегрузке в C ++
- Перегрузка в Java
- Перегрузка Python
- Перегрузка и переопределение в C #
- Преобразование типов в Java с типами и примерами