问题:有两个类,A和B
public abstract class A
{
public A()
{
Console.WriteLine("A");
}
public virtual void Fun()
{
Console.WriteLine("A.Fun()");
}
}
public class B : A
{
public B()
{
Console.WriteLine("B");
}
public new void Fun()
{
Console.WriteLine("B.Fun()");
}
}
如果运行:
public void Main()
{
A a = new B();
a.Fun();
}
输出是:
A
B
A.Fun()
如何解释这个结果,我知道它与抽象和成功有关,但我不知道如何解释。请帮忙。
答案 0 :(得分:8)
您需要区分new
和override
:
new
:不 覆盖或触摸继承的基本方法。标记为B
的{{1}}中的方法仅在类型为new
的对象(例如B
)上调用时调用,但在调用类型{的实例时不调用{1}}映射到((B)a).Fun()
类型的对象。可用于任何方法(即“隐藏基本方法”)。B
触摸继承,基本功能真正覆盖。 A
将调用override
中定义的方法。只能用于标记为a.Func()
的基本方法。