C#类多态性 [英] C# class polymorphism
问题描述
为什么会出现空闲代码的结果:
Why the result of the fallowing code is:
A级
A级
A级
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();
}
推荐答案
这是因为 virtual
不等于 override
.通过使用 virtual
关键字,您实际上是在创建新方法,该方法是虚拟的,但它是您的类(B 类)的新方法,并且不会覆盖类的 A 方法.从 B 继承的类 C 不知道类的 A 方法 f() 所以它需要 B.f() 来覆盖它.在 Main 方法中,您正在创建一个 A 类数组,其中只有 A.f() 方法存在.如果你想
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
输出使用 override
而不是 B 类中的 virtual
.
output use override
instead of virtual
in class B.
这篇关于C#类多态性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!