これは仮想メソッドを示す小さなコードです。C#仮想メソッドの下のコードを理解する必要があります
class A
{
public virtual void F() { Console.WriteLine("A.F"); }
}
class B: A
{
public override void F() { Console.WriteLine("B.F"); }
}
class C: B
{
new public virtual void F() { Console.WriteLine("C.F"); }
}
class D: C
{
public override void F() { Console.WriteLine("D.F"); }
}
class Test
{
static void Main()
{
D d = new D();
A a = d;
B b = d;
a.F();
b.F();
}
}
このコードは、以下の出力を印刷している:
B.F
B.F
a.Fは()B.Fを出力しますなぜ私が理解できないのですか?
クラスBがクラスAのF()をオーバーライドしているため、このメソッドがクラスCで「新しい」キーワードを使用して隠されているため、Dクラスで再びオーバーライドされるため、DFが印刷されると考えました。とどまる。
でも、それはしていません。 B.Fをなぜ印刷しているのか教えてください。
ティラックと皆さん、私は今それを得ました:-) –