to jest mały kod, który pokazuje wirtualne metody.Potrzebujesz zrozumieć poniższy kod dla wirtualnych metod 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();
}
}
Ten kod drukuje poniższy wynik:
B.F
B.F
Nie mogę zrozumieć, dlaczego a.F() drukuje B.F?
Myślałem, że wydrukuje DF, ponieważ klasa B zastępuje F() klasy A, wówczas ta metoda jest ukrywana w klasie C za pomocą słowa kluczowego "nowy", to znowu jest nadpisywana w klasie D. Tak więc w końcu DF gorset.
ale tego nie robi. Czy mógłbyś wyjaśnić, dlaczego drukuje B.F?
Dziękuję Tilak i wszystkim, mam to teraz :-) –