C# Чем отличается механизм наследования простых функций от виртуальных [дубликат]

210
26 ноября 2017, 11:53

На данный вопрос уже ответили:

  • UpCast C#.Override и Virtual 1 ответ

Поднялся интересный вопрос. Я как послушный мальчик прочел в доках(микрософт док), что определение виртуал требуется если я планирую разрешать перекрытие методов в потомках, а если я такого определения перед методом не напишу, то фиг он в потомке перекроется.

Эксперимента ради написал следующий код.

class A
{
    void  FuncA()
    {
    }
}
class B : A
{
    new void FuncA()
    {
         base.FuncA();
    }
}

Получается, что если верить микрософт доку такая конструкция не должна компилироваться. А если скомпилируется вызов базовой функции в таком потомке не должен пройти.

Запуск проходит, обращение к предку проходит.

Обьясните или дайте ссылку на чтонибудь почитать. Какой механизм наследования и в чемже разница между обычной функцией и виртуальной?

Answer 1

Перекрытие в данном случае не произойдёт при приведении одного типа в другой:

var b = new B();
b.FuncA(); // будет тот что определён в B класса
var a = (А) b;
a.FuncA(); // всё равно будет вызов метода из B класса

Уже есть хороший ответ по схожей теме.

READ ALSO
C# вызов методов предка

C# вызов методов предка

Чисто вопрос интереса радиВозможно ли вызвать метод старее чем предок из потомка? Чтонибудь типа

203
Поиск чисел в string

Поиск чисел в string

Решаю задачу:

259
Папка создается не в нужном месте C#

Папка создается не в нужном месте C#

Добрый деньНаписал приложение-1 на C#, которое создает папку

220
Mассивы класса c шарп

Mассивы класса c шарп

Не могу справится с, на первый взгляд,простой задачей: В строке найти количество вхождений каждой буквыСоздал класс с двумя свойствами

249