我不确定这是否更适合SE上的程序员。
我正在学习继承,特别是如何使用覆盖 - 我可以看到我可以使用override来扩展功能,也可以使用new来创建新功能。
EG
public override int Calls(int i)
{
//Do some things
return base.Calls(i);
}
上面做了逻辑,然后调用基类。
如果我做新的
public new int Calls(int i)
然后我可以实现自己的逻辑,好像基类从未存在过(因为它从未被调用过)。
令我困惑的是我可以简单地从我的覆盖方法中删除基类调用,而我认为我得到与new相同的结果。含义
public override int Calls(int i)
{
//Do some things
// return base.Calls(i); COMMENTED OUT, no base class call
}
上面的代码段肯定与public new int Calls(int i)
我的问题是,我是对的 - 这最终有两种方式可以做同样的事情,所以它在开发人员的清晰度方面变得更好(通过使用覆盖或新的)或两者之间是否有任何其他差异(任何疑难杂症的)。
答案 0 :(得分:1)
新内容和覆盖之间存在大量差异。
如果覆盖,则无论是否持有基类对象或派生类型的对象,都会调用此覆盖方法。
但是,对于new,如果保存派生类的对象,则派生类的方法仅称为 。 "新"你应该非常小心,我只是不使用它。