Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
1072 of 1492 menu
◀ ▶

override и new

Если в базе метод помечен virtual или abstract, в наследнике пишут override - тогда ссылка на базовый тип вызывает новую версию. Ключевое слово new создаёт отдельный член: через переменную базы остаётся старая реализация.

Синтаксис

public override тип Метод() { } public new тип Метод() { }

Пример

Давайте перекроем виртуальный метод через override:

using System; class BaseA { public virtual string GetTag() { return "base"; } } class DerivedA : BaseA { public override string GetTag() { return "override"; } } class Program { static void Main() { BaseA item = new DerivedA(); Console.WriteLine(item.GetTag()); } }

Результат выполнения кода:

"override"

Пример

Давайте скроем метод через new и сравним вызовы:

using System; class BaseB { public string GetTag() { return "base"; } } class DerivedB : BaseB { public new string GetTag() { return "new"; } } class Program { static void Main() { var direct = new DerivedB(); BaseB viaBase = direct; Console.WriteLine(direct.GetTag() + " " + viaBase.GetTag()); } }

Результат выполнения кода:

new base

Пример

Давайте скроем new поле с тем же именем:

using System; class BaseC { public int Code = 1; } class DerivedC : BaseC { public new int Code = 2; } class Program { static void Main() { var item = new DerivedC(); BaseC via = item; Console.WriteLine(item.Code + " " + via.Code); } }

Результат выполнения кода:

2 1

Смотрите также

  • override,
    который заменяет виртуальную реализацию
  • new,
    который скрывает унаследованный член
  • virtual,
    который разрешает перекрытие в наследнике
  • наследование,
    которое связывает базовый и производный тип
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить