Модификатор 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,
который создаёт экземпляр типа