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

Модификатор new

new ставят перед типом поля, свойства или метода в производном классе. Это не полиморфное перекрытие: переменная базового типа по-прежнему видит старый член. Для замены поведения при вызове через базу нужны virtual и override.

Синтаксис

public new тип Метод() { // скрывает одноимённый член базы }

Пример

Давайте скроем метод базового класса:

using System; class BaseRow { public string GetText() { return "12345"; } } class DerivedRow : BaseRow { public new string GetText() { return "abcde"; } } class Program { static void Main() { var direct = new DerivedRow(); BaseRow via = direct; Console.WriteLine(direct.GetText() + " " + via.GetText()); } }

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

abcde 12345

Пример

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

using System; class BaseNum { public int Code = 1; } class DerivedNum : BaseNum { public new int Code = 2; } class Program { static void Main() { var item = new DerivedNum(); Console.WriteLine(item.Code); } }

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

2

Пример

Давайте скроем свойство в наследнике:

using System; class BaseLen { public int Length => 5; } class DerivedLen : BaseLen { public new int Length => 10; } class Program { static void Main() { DerivedLen item = new DerivedLen(); BaseLen via = item; Console.WriteLine(item.Length + " " + via.Length); } }

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

10 5

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

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