Sobes.tech
Назад к вопросам
Junior — Middle
60

Каким образом в C# осуществляется переопределение методов в наследуемых классах?

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

В C# переопределение методов выполняется через virtual в базовом классе и override в наследнике. Это позволяет заменить реализацию базового метода в производном классе без изменения сигнатуры. Такой механизм работает только для методов, явно разрешённых к переопределению.

Определение:

Переопределение — это изменение поведения унаследованного метода в дочернем классе. В базовом классе метод помечают virtual или abstract, а в наследнике — override. При вызове через ссылку базового типа будет выполнена версия метода, соответствующая реальному объекту.

Пример использования:

using System;

class Animal
{
    public virtual void Speak()
    {
        Console.WriteLine("Животное издаёт звук");
    }
}

class Dog : Animal
{
    public override void Speak()
    {
        Console.WriteLine("Собака лает");
    }
}

class Program
{
    static void Main()
    {
        Animal a = new Dog();
        a.Speak(); // Собака лает
    }
}

Пояснение кода:

Код не требуется — достаточно понять последовательность работы. Сначала в базовом классе Animal метод Speak() объявлен как virtual, то есть его можно переопределять. Затем в классе Dog этот же метод объявлен с override, и новая реализация заменяет базовую. При вызове a.Speak() используется не тип переменной Animal, а фактический тип объекта Dog, поэтому выводится "Собака лает".

Ключевые моменты:

  • virtual разрешает переопределение метода в потомках.
  • override используется в наследнике для замены реализации.
  • Сигнатура метода при переопределении должна совпадать с базовой.
  • При полиморфизме вызывается версия метода по реальному типу объекта.
  • abstract-методы тоже переопределяются через override, но не имеют реализации в базе.
  • Нельзя переопределить метод, если он не помечен как virtual, abstract или уже override.