Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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();
}
like image 491
Mark Avatar asked Aug 05 '26 12:08

Mark


1 Answers

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.

like image 53
Blablablaster Avatar answered Aug 08 '26 01:08

Blablablaster



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!