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();
}
It’s because
virtualdoes not equals tooverride. By usingvirtualkeyword 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
output use
overrideinstead ofvirtualin class B.