C#abstract,subclass,如何解释这个结果

时间:2014-10-14 09:02:21

标签: c# subclass abstract

问题:有两个类,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()

如何解释这个结果,我知道它与抽象和成功有关,但我不知道如何解释。请帮忙。

1 个答案:

答案 0 :(得分:8)

您需要区分newoverride

  • new 覆盖触摸继承的基本方法。标记为B的{​​{1}}中的方法仅在类型为new的对象(例如B)上调用时调用,但在调用类型{的实例时不调用{1}}映射到((B)a).Fun()类型的对象。可用于任何方法(即“隐藏基本方法”)。
  • B 触摸继承,基本功能真正覆盖。 A将调用override中定义的方法。只能用于标记为a.Func()的基本方法。