В чем разница между перегрузкой и переопределением.
c#
inheritance
Кирилл Кобелев
источник
источник
Ответы:
Перегрузка
Перегрузка - это когда у вас есть несколько методов в одной области, с одним и тем же именем, но с разными сигнатурами.
Отмена
Переопределение - это принцип, который позволяет вам изменять функциональность метода в дочернем классе.
источник
void
дляgetStuff
вtest2
getStuff(2, "Hello world!");
или я могу это сделатьgetStuff("Myname", "Mysurname", "Hello World!");
? Кто-нибудь может подтвердить, что это способ сделать это?Простые определения для перегрузки и переопределения
Перегрузка (полиморфизм времени компиляции) :: Функции с одинаковым именем и разными параметрами
Переопределение (полиморфизм времени выполнения) :: Функции в расширенном классе с тем же именем и теми же параметрами, что и в базовом классе, но с другим поведением.
источник
Я хочу поделиться примером, который имел для меня много смысла, когда я учился:
Это просто пример, который не включает виртуальный метод или базовый класс. Просто чтобы намекнуть на главную идею.
Допустим, есть машина для мойки автомобилей, у нее есть функция, называемая «Wash», и она принимает автомобиль в качестве типа.
Получает ввод автомобиля и моет машину.
Давайте перегрузим функцию Wash ()
Перегрузка:
Раньше функция мойки была только для мытья автомобиля, но теперь она перегружена и для мытья грузовика.
Давайте переопределим функцию Wash ()
Переопределение:
Функция стирки теперь имеет условие, позволяющее проверять, является ли автомобиль уже чистым и его не нужно мыть снова.
Если Автомобиль чистый, просто нанесите на него воск.
Если не чистая, то сначала вымойте машину, затем высушите, а затем воском.
.
Таким образом, функциональность была переопределена путем добавления новой функциональности или выполнения чего-то совершенно другого.
источник
Проницательный интервьюер ответил бы:
В чем разница между перекрытием и затенением?
источник
Как сказал Майкл:
и
источник
Наличие более одного метода / конструктора с одинаковым именем, но разными параметрами называется перегрузкой. Это событие времени компиляции.
O / p:
Переопределение - это событие времени выполнения, то есть в зависимости от вашего кода выходные данные меняются во время выполнения.
Обратите внимание, что в обоих классах topSpeed () есть общий метод. Поскольку мы создали экземпляр Ferrari, мы получили другой результат.
O / p:
источник
в C # нет Java, подобного скрытому переопределению, без переопределения ключевых слов в методе переопределения! см. эти реализации C #:
вариант 1 без переопределения : результат 200
вариант 2 с ключевым словом override : результат 400
ключевое слово virtual в классе Car противоположно final для Java, означает не final , вы можете переопределить или реализовать, если автомобиль был абстрактным
источник
shadowing = поддерживает два определения в производном классе и, чтобы проецировать определение базового класса, затеняет (скрывает) определение производного класса и наоборот.
источник
Еще один момент, который нужно добавить.
Перегрузка методов с одинаковым именем. Тот же или другой тип возвращаемого значения. Различное количество параметров или Другой тип параметров. В том же классе или производном классе.
int Add (int num1, int num2) int Add (int num1, int num2, int num3) double Add (int num1, int num2) double Add (double num1, double num2)
Может быть возможно в том же классе или производном классе. Обычно предпочитает принадлежать к тому же классу. Например, Console.WriteLine () имеет 19 перегруженных методов.
Может перегружать конструкторы классов, методы.
Можно рассматривать как полиморфизм времени компиляции (статическое / раннее связывание).
================================================== ================================================== знак равно
Переопределение невозможно в том же классе. Может переопределять методы класса, свойства, индексаторы, события.
Имеет некоторые ограничения, например, переопределенный базовый метод должен быть виртуальным, абстрактным или переопределяемым. Вы не можете использовать модификаторы new, static или virtual для изменения метода переопределения.
Можно рассматривать как полиморфизм времени выполнения (динамическое / позднее связывание).
Помогает в управлении версиями http://msdn.microsoft.com/en-us/library/6fawty39.aspx
================================================== ================================================== знак равно
Полезные ссылки
http://msdn.microsoft.com/en-us/library/ms173152.aspx Полиморфизм времени компиляции и полиморфизм времени выполнения
источник
Перегрузка является частью статического полиморфизма и используется для реализации разных методов с тем же именем, но с разными сигнатурами. Переопределение используется для завершения неполного метода. На мой взгляд, нет никакого сравнения между этими двумя концепциями, единственное сходство в том, что оба имеют один и тот же словарь, который закончился.
источник
Перегрузка метода и переопределение метода - это две совершенно разные концепции. Перегрузка метода имеет то же имя метода, но с разными сигнатурами. Переопределение метода изменяет реализацию по умолчанию метода базового класса в производном классе. Ниже вы можете найти 2 отличных видеоурока, объясняющих эти концепции.
Переопределение метода против сокрытия
Перегрузка метода
источник
Перегрузка - это концепция, в которой у вас есть одинаковые сигнатуры или методы с одинаковым именем, но с разными параметрами и переопределением, у нас есть методы с одинаковым именем с разными параметрами, также есть наследование, известное как переопределение.
источник