C#中的多态性。 Base Class 的方法被调用了,但是为什么?

Polymorphism in C#. Base Class's Method is Called But Why?

我阅读的大多数关于继承层次结构中方法的多态性的文章没有提供发生这种情况的原因。有人可以提供以下行为的原因或类比吗?

Class A{
    public void Print(){
        Console.WriteLine("A.Print");
    }
}

Class B : A{
    public void Print(){
        Console.WriteLine("B.Print");
    }
}

Class Test{
   public static void Main(string[] args){
         A a = new B();
         a.Print();  // Prints "A.Print"
    }
}

测试 class 中的代码打印 "A.Print"、但是为什么?

在 class 测试中你定义了一个类型 A 的实例 因此调用 class A 定义中的方法 Print。

和铸造有关,也许这个有用

https://msdn.microsoft.com/en-us/library/ms173105.aspx

您创建了一个 B 的实例,假设为 "Bigger",但是变量 'a' 被转换为 class A,即 "Smaller" 并包含方法 print A. 你做了类似的事情:

A​​ : I类 B : I类

接口暴露了A和B中的一些方法,你触发它,使用:

(I类)A.Print (IClass)B.Print

这里也是一样:

简单来说。 B 包含 class A。所以你用 A a = new B();启动了 B class 但同时提取(转换)为 A class.

使基础 class 方法成为虚拟方法,并在派生的 class 方法中使用 override 关键字。