【发布时间】:2014-09-28 04:30:32
【问题描述】:
这是我混淆的代码。
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# 的新手,需要帮助....
【问题讨论】:
-
您使用了
new关键字而不是覆盖。使用new会破坏继承链。 -
new 是一个棘手的野兽。尝试打印 ((jar)objtar).print()
-
我知道这可以使用 jar obj = new jar() 来完成。但是我对 jar 的 print() 被调用为什么不在这里调用 foo print() 感到震惊?
标签: c# inheritance polymorphism virtual overriding