这是我困惑的代码。
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();
}
}
在这段代码中,我使用3级派生类(jar)对象和base(foo)调用print方法。通过查看输出
我很困惑我是第一个派生词
有人可以解释其背后的原因。我是c#需要帮助的新手......
答案 0 :(得分:0)
这是因为您在print
的实例上调用了foo
。 new
关键字仅适用于该类型的类型化实例。
由于tar.print
为new
,继承规则不再适用。
这是您在MSDN上可以找到的所有记录的行为。
所以这将按预期工作:
jar objtar = new jar();
objtar.print();