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

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

Метод с virtual имеет реализацию в базовом классе, но наследник может заменить её через override. Вызов через переменную базового типа тогда использует версию фактического объекта. Без virtual перекрытие возможно только через new со скрытием.

Синтаксис

public virtual тип Метод() { // тело в базе }

Пример

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

using System; class BaseRow { public virtual string GetText() { return "abcde"; } } class DerivedRow : BaseRow { } class Program { static void Main() { BaseRow item = new DerivedRow(); Console.WriteLine(item.GetText()); } }

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

"abcde"

Пример

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

using System; class BaseCode { public virtual string GetCode() { return "12345"; } } class CustomCode : BaseCode { public override string GetCode() { return "abcde"; } } class Program { static void Main() { BaseCode item = new CustomCode(); Console.WriteLine(item.GetCode()); } }

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

"abcde"

Пример

Давайте объявим виртуальное свойство:

using System; class BaseLen { public virtual int Length => 5; } class LongLen : BaseLen { public override int Length => 10; } class Program { static void Main() { BaseLen item = new LongLen(); Console.WriteLine(item.Length); } }

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

10

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

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