Во-первых, вы получите ошибку компиляции, потому что virtual
члены не могут быть частными, которые A.m1
как написано.
Во-вторых, как только вы исправите это, вы получите предупреждение о компиляции, которое B.m1
скрывает унаследованного пользователя A.m1
.
В-третьих, если вы делаете что-то вроде этого:
A a = new B();
a.m1();
Это будет вызывать A.m1
а если вставить override
в определение B.m1
то выше будет вызывать B.m1
. Однако, если вы введете new
в определение B.m1
, то указанное выше будет по-прежнему вызывать A.m1
, но оно будет опускать предупреждение о компиляции.
Когда вы скомпилировали этот код, что вышло в Visual Studio? –