压倒一切和新的

时间:2015-02-16 09:08:20

标签: .net

我不确定这是否更适合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)

相同

我的问题是,我是对的 - 这最终有两种方式可以做同样的事情,所以它在开发人员的清晰度方面变得更好(通过使用覆盖或新的)或两者之间是否有任何其他差异(任何疑难杂症的)。

1 个答案:

答案 0 :(得分:1)

新内容和覆盖之间存在大量差异。

如果覆盖,则无论是否持有基类对象或派生类型的对象,都会调用此覆盖方法。

但是,对于new,如果保存派生类的对象,则派生类的方法仅称为 。 "新"你应该非常小心,我只是不使用它。