На данный вопрос уже ответили:
Поднялся интересный вопрос. Я как послушный мальчик прочел в доках(микрософт док), что определение виртуал требуется если я планирую разрешать перекрытие методов в потомках, а если я такого определения перед методом не напишу, то фиг он в потомке перекроется.
Эксперимента ради написал следующий код.
class A
{
void FuncA()
{
}
}
class B : A
{
new void FuncA()
{
base.FuncA();
}
}
Получается, что если верить микрософт доку такая конструкция не должна компилироваться. А если скомпилируется вызов базовой функции в таком потомке не должен пройти.
Запуск проходит, обращение к предку проходит.
Обьясните или дайте ссылку на чтонибудь почитать. Какой механизм наследования и в чемже разница между обычной функцией и виртуальной?
Перекрытие в данном случае не произойдёт при приведении одного типа в другой:
var b = new B();
b.FuncA(); // будет тот что определён в B класса
var a = (А) b;
a.FuncA(); // всё равно будет вызов метода из B класса
Уже есть хороший ответ по схожей теме.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости