我有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(的工作完全符合我的预期
基本上,如果希望即使通过编译时类型为Product1
或Product2
的引用调用Product3.Show
,也应该使用override
而不是new
。