【发布时间】:2012-05-11 19:20:52
【问题描述】:
程序代码——2个类,B继承自A,TypeH()贴出类字母:
class Program
{
static void Main(string[] args)
{
A z = new A();
A x = new B();
B y = (B)x;
z.TypeH();
x.TypeH();
y.TypeH();
x = (A)y;
x.TypeH();
}
}
class A
{
public virtual void TypeH()
{
Console.WriteLine("A");
}
}
class B : A
{
public override void TypeH()
{
Console.WriteLine("B");
}
}
输出:A B B B 为什么最后一个输出是 B 而不是 A?
【问题讨论】:
-
考虑这一点:您正在将 B 对象转换为 A 对象,但是从行 A x = new B() 您已经知道,当 B 转换为 A 时,调用的方法是来自 B 的方法。 . 所以你应该期待最终的结果是一样的。为了详细了解谷歌 csharp 中的覆盖是如何工作的.. 那里有带有图表的解释,可以清除您的任何疑问
标签: c# inheritance casting type-conversion