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

Jim*_*imZ 0 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()");
    }

}
Run Code Online (Sandbox Code Playgroud)

如果运行:

    public void Main()
    {
        A a = new B();
        a.Fun();
    }
Run Code Online (Sandbox Code Playgroud)

输出是:

A
B
A.Fun()
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*Fin 8

您需要区分newoverride:

  • new:这并没有 覆盖触摸继承的基方法.B标记为的方法new仅在您在类型B(例如((B)a).Fun())对象上调用时调用,但在调用B映射到类型对象的类型实例时不调用A.可以在任何方法上使用(即"隐藏基本方法").
  • override确实触及了继承,并且基本功能确实被覆盖了.a.Func()将调用中定义的方法B.只能用于标记为的基本方法virtual.