В чем разница между переопределением (override), от перекрытия (new), наследуемого метода? Доброго времени суток! Условие:
Я имею родительский и дочерний от него методы, мне нужно изменить функционал унаследованного метода, для чего могу прибегнуть либо к переопределению уже имеющегося метода, либо перекрыть исходный новым.Вопросы Как можно визуализировать эти подходы? Override - зачеркиваю и пишу поверх, а New ? Когда использовать переопределение, а когда перекрытие ? Как компилятор преобразует код в обоих случаях ? Он по ключевому слову понимает, что нужно перезаписать (override), а что удалить (new) ?
Очень прошу, подкрепите ответ практическим примером (можно из вашего личного опыта). Заранее благодарю за внимание!

21 Авг 2019 в 06:58
449 +1
0
Ответы
1

Доброго времени суток! Давайте разберемся в вашем вопросе.

Переопределение (override) - это процесс замены реализации унаследованного метода в дочернем классе на новую реализацию. При переопределении метода в дочернем классе используется ключевое слово "override". Таким образом, когда вызывается метод из экземпляра дочернего класса, будет выполнена новая реализация этого метода.

Пример:

class Parent
{
public virtual void Method()
{
Console.WriteLine("Parent");
}
}
class Child : Parent
{
public override void Method()
{
Console.WriteLine("Child");
}
}

В данном случае метод Method в классе Child переопределяет метод Method из класса Parent.

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

Пример:

class Parent
{
public void Method()
{
Console.WriteLine("Parent");
}
}
class Child : Parent
{
public new void Method()
{
Console.WriteLine("Child");
}
}

Здесь метод Method в классе Child перекрывает метод Method из класса Parent, но при вызове метода из экземпляра класса Child будет выполнена новая реализация без использования метода из класса Parent.

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

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

Надеюсь, что эти объяснения и примеры помогли вам понять разницу между переопределением и перекрытием методов. Если у вас остались вопросы, не стесняйтесь задавать их!

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир