D'abord, vous obtiendrez une erreur de compilation parce que virtual
membres ne peuvent pas être privés qui A.m1
est aussi écrit. Deuxièmement, une fois que vous corrigez cela, vous recevrez un avertissement à la compilation indiquant que le B.m1
cache le membre hérité A.m1
.
Troisièmement, si vous faites quelque chose comme ceci:
A a = new B();
a.m1();
Cela invoquera A.m1
alors que si vous insérez override
dans la définition de B.m1
alors ce qui précède invoquer B.m1
. Cependant, si vous insérez new
dans la définition de B.m1
, alors ce qui précède appellera toujours A.m1
mais il omettra l'avertissement de compilation.
Lorsque vous avez compilé ce code, que Visual Studio a-t-il produit? –