-1

我有 3 个类的多级继承

class Product1
{
    public virtual void Show()
    {
        Console.WriteLine("Product1.show");
    }
}
class Product2 : Product1
{
    public override void Show()
    {
        Console.WriteLine("Product2.show");
    }
}
class Product3 : Product2
{
    public new void Show()
    {
        Console.WriteLine("Product3.show");
    }
}

在创建对象时,我将 Product3 的对象分配给 Product1。

class Products
    {
        static void Main()
        {
            Product1 product1 = new Product1();
            Product3 product3 = new Product3();

            product1 = product3;

            product3.Show();
            product1.Show();
        }
    }

并调用 Show 方法。我认为在这两种情况下,答案都是 Product3.show 但不确定如何调用 Product2.show。

控制台截图

任何有关解释的帮助将不胜感激:)

4

1 回答 1

1

就编译器而言,您的Product3.Show方法实际上是一种完全不同的方法Product1.Show,它被Product2.Show. 通过使用new修饰符,您已将其与现有Show方法显式隔离。C# 编译器(和 CLR)的工作方式完全符合我的预期。

基本上,如果您 Product3.Show通过编译时类型为Product1or的引用来调用Product2,您应该使用override而不是new.

于 2021-03-18T12:29:52.710 回答