基类中的重写函数

加雷斯

在下面的示例中,我想替换一部分计算,而不必在派生子类中重新实现整个计算。

class DummyCalcBase
{
    public int changeable_part()
    {
        return 5;
    }

    public int common_calculation()
    {
        return 5 * changeable_part();
    }
}

class DummyCalc : DummyCalcBase
{
    public new int changeable_part()
    {
        return 10;
    }
}

class Program
{
    static void Main(string[] args)
    {
        int c = new DummyCalcBase().common_calculation();
        Console.WriteLine("Base gives " + c.ToString());

        int c2 = new DummyCalc().common_calculation();
        Console.WriteLine("Calc gives " + c2.ToString());
    }
}

然后给出输出:Base给出25 Calc给出25

我想要的是获取DummyCalc()。common_calculation()来调用新的changeable_part(并给出答案50)。

这意味着我不必将相同的方法复制并粘贴到子类中。

你可以override方法,如果是virtual

class DummyCalcBase
{
    public virtual int changeable_part()
    {
        return 5;
    }

    public int common_calculation()
    {
        return 5 * changeable_part();
    }
}

class DummyCalc : DummyCalcBase
{
    public override int changeable_part()
    {
        return 10;
    }
}

new带有关键字的方法隐藏基类的方法

如果方法是虚拟的,则以下代码将计算50:

DummyCalcBase dummy = new DummyCalc();
int calc = dummy.common_calculation();

SO:新vs覆盖差异

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Javascript中重写基类构造函数

C ++:在基类的构造函数中调用重写的方法

在基类构造函数中对派生类使用重写函数

在基类数组中使用重写函数

从基类方法调用基类重写的函数

基类构造函数在Java中调用重写方法时派生类对象的状态

在派生类中重写哪个基类的虚拟析构函数

Javascript:在派生类中重写之前如何调用基类函数?

为什么派生类中的重写函数会隐藏基类的其他重载?

如何重写基类中的相等性?

从超类构造函数调用基类重写方法

有没有办法在基类中使用重写的函数?(在Java中)

如何重写在多个继承中具有相同名称的基类的虚函数?

Javascript基类构造函数以子类(重写)属性运行

基类中的虚函数

在基类构造函数中设置时,为什么重写的get-only属性保持为null?

Java中跨继承类的函数重载与函数重写

如何重写Javascript类中的函数并调用基本函数

在基类重写的 ToString 方法中访问子类对象

WebStorm:在ES6基类中重写Mark方法

我们可以快速从基类访问重写的类函数吗?

从基类调用重写的方法

从TypeScript中基于JavaScript函数的类重写方法

在派生类中重写C ++模板函数

在父类和子类的构造函数中调用重写的方法

重写const函数以修改C ++中的类变量?

派生类中的私有重写虚拟函数

如何在C++中调用父类的重写函数?

在Java中,如何从派生类中的重写方法中调用基类的方法?