Mark
Mark

Reputation: 1100

C# class polymorphism

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();
}

Upvotes: 3

Views: 265

Answers (2)

Blablablaster
Blablablaster

Reputation: 3348

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.

Upvotes: 10

Bellash
Bellash

Reputation: 8204

AAA because

A[] array = new A[3]; /*main reference to A object*/

Upvotes: 0

Related Questions