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

122
08 февраля 2021, 05:40

Пусть имеется 3 класса A B и C. B наследуется от А, а C в свою очередь от B, следовательно B получит всё что есть у A, а C получит всё от A и B. И вот вопрос что будет происходить если в классе А имеется виртуальный метод void speak(), а класс B его просто переопределяет и также поступает класс С, и меня собственно интересует будут ли классы В и С иметь в себе базовую версию метода от класса А или она каким-то образом скрывается при переопределении и допустим класс C получит лишь переопределённую версию от класса В,а самая первая версия метода из класса А вообще не дойдёт до класса С.

Answer 1

Если в наследнике метод помечен модификатором override, то он полностью переопределяет поведение класса-родителя, связанное с этим методом. Однако в наследнике можно вызвать реализацию virtual-метода родителя с помощью ключевого слова base. Например, так:

public class A
{
    public virtual void Speak()
    {
        Console.WriteLine("I speak as A");
    }
}
public class B : A
{
    public override void Speak()
    {
        base.Speak();
        Console.WriteLine("I can also speak as B");
    }
} 
READ ALSO
Вызов метода контроллера MVC из папки Scripts

Вызов метода контроллера MVC из папки Scripts

Есть следующий контроллер:

136
Влияет ли имя таблицы, как параметр хранимой процедуры, на производительность?

Влияет ли имя таблицы, как параметр хранимой процедуры, на производительность?

Хочу реализовать хранимую процедуру, которая будет принимать название таблицы, колонки и значение для повышения производительности, тк

115
Можно ли сделать в MySQL CREATE TABLE LIKE с триггерами?

Можно ли сделать в MySQL CREATE TABLE LIKE с триггерами?

Возможно ли перенести триггеры в другую(точно такую же) таблицу в MySQL? У меня есть таблица test, со временем я её архивирую и на ее месте создаю...

136