C# class polymorphism
c#, polymorphism
Solution
It's because `virtual` does not equals to `override`. By using `virtual` keyword you essentially creating new method, which is virtual but it is new to your class(class B) and does not override class's A method. Class C which is inherited from B doesn't know about class's A method f() so it takes B.f() to override it. And in the Main method you are creating an array of A classes where only A.f() method exists. If you want
Class A
Class B
Class C
output use `override` instead of `virtual` in class B.
Problem
Why the result of the fallowing code is: Class A Class A Class A ``` public class A { public virtual void f() { Console.WriteLine("Class A"); } } public class B : A { public virtual void f() { Console.WriteLine("Class B"); } } public class C : B { public override void f() { Console.WriteLine("Class C"); } } //... static void Main(string[] args) { A[] array = new A[3]; array[0] = new A(); array[1] = new B(); array[2] = new C(); for(int d = 0; d < 3; d++) array[d].f(); } ```