使用new关键字中断虚拟调用,并再次启动新的虚拟层次结构
本文关键字:虚拟 启动 层次结构 关键字 new 中断 调用 使用 | 更新日期: 2023-09-27 18:16:23
这是我弄混的代码。
class foo
{
public string fname;
public virtual void print()
{
Console.WriteLine("I am the boss i am the virtual");
}
};
class bar : foo
{
public override void print()
{
Console.WriteLine("I am the first derivative");
}
};
class tar : bar
{
public new virtual void print()
{
Console.WriteLine("I am the newly born baby with a new keyword!!!!");
}
};
class jar : tar
{
public override void print()
{
Console.WriteLine("i am created in derivative of tar i.e, jar");
}
};
class Program
{
static void Main(string[] args)
{
foo obj1 = new foo();
obj1.fname = "neha";
foo objtar = new jar(); //here lies the confusion why bar print() is called
objtar.print();
}
}
在这个代码中,我使用第三级派生类(jar)对象和基(foo)调用打印方法。我看到输出很困惑,它是
有人能解释一下背后的原因吗?我是c#新手需要帮助....我是一阶导数
这是因为您在foo
的实例上调用print
。new
关键字将只应用于该类型的类型化实例。
继承规则不再适用,因为tar.print
是new
。
这是所有记录的行为,你可以在MSDN上找到。
所以这将工作如你所愿:
jar objtar = new jar();
objtar.print();