多级继承的问题



我有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是如何命名的。

控制台屏幕截图

任何解释方面的帮助都将不胜感激:(

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

基本上,如果希望即使通过编译时类型为Product1Product2的引用调用Product3.Show,也应该使用override而不是new

最新更新