Полиморфизм
Через наследование класс может использоваться как более одного типа; он может использоваться в качестве своего собственного типа, любых базовых типов или любого типа интерфейса, если он реализует интерфейсы. Это называется полиморфизмом.
Полиморфизм означает наличие более чем одной формы. Перегрузка и переопределение используются для реализации полиморфизма. Полиморфизм классифицируется на полиморфизм во время компиляции или раннее связывание или статическое связывание и полиморфизм во время выполнения или позднее связывание или динамическое связывание.
Переопределение - одни и те же имена методов с одинаковыми аргументами и одинаковыми типами возврата, связанные в классе и его подклассе. Переопределение в C # использует ключевое слово "переопределить". Переопределить метод означает заменить его новым способом обработки данных.
Перегрузка - одно и то же имя метода с разными аргументами, может или не может быть одного и того же возвращаемого типа, записанного в одном и том же классе.
Полиморфизм времени компиляции или раннее связывание
Полиморфизм, при котором компилятор определяет, какую полиморфную форму он должен выполнить во время компиляции, которую он сам выполняет, называется полиморфизмом времени компиляции или ранним связыванием.
Преимущество раннего связывания в том, что выполнение будет быстрым. Поскольку каждая вещь о методе известна компилятору во время компиляции, его недостатком является недостаток гибкости.
Примерами раннего связывания являются перегруженные методы, перегруженные операторы и переопределенные методы, которые вызываются напрямую с использованием производных объектов.
Полиморфизм времени исполнения или позднее связывание
Полиморфизм, при котором компилятор определяет, какую полиморфную форму выполнять во время выполнения, но не во время компиляции, называется полиморфизмом времени выполнения или поздним связыванием.
Преимущество позднего связывания заключается в гибкости, а недостаток - в том, что выполнение будет медленным, поскольку компилятор должен получать информацию о методе, который нужно выполнить во время выполнения.
Пример позднего связывания - переопределенные методы, которые вызываются с использованием объекта базового класса.
class A
{
public virtual void Leg(string Name)
{
}
}
class B:A
{
public override void Leg(string Name)
{
}
}
Пример для перегрузки
class A
{
void a()
{
}
void a(string Name)
{
}
}
Другими словами, «многие формы одного объекта называются полиморфизмом».
Например:
Лидер команды ведет себя к подчиненному ординату.
Руководитель группы ведет себя по отношению к своим старшим.
Лидер команды ведет себя с другими лидерами команды.
Здесь руководитель группы - это объект, но в разных ситуациях отношение другое.
Разница между переопределением метода и сокрытием метода
Переопределение метода позволяет подклассу предоставлять конкретную реализацию метода, которая уже предоставлена базовым классом. Реализация в подклассе переопределяет (заменяет) реализацию в базовом классе.
При переопределении важно помнить, что метод, выполняющий переопределение, связан с методом в базовом классе.
Когда виртуальный метод вызывается для ссылки, фактический тип объекта, на который ссылается ссылка, используется для определения того, какую реализацию метода следует использовать. Когда метод базового класса переопределяется в производном классе (подклассе), используется версия, определенная в производном классе. Это так, даже если вызывающее приложение не знает, что объект является экземпляром производного класса.
Скрытие метода не имеет отношения между методами в базовом классе и производном классе. Метод в производном классе скрывает метод в базовом классе.