我可以为重写方法添加括号吗?

时间:2015-01-13 23:09:37

标签: c# override parentheses

通过重写函数传递值时,在编译时遇到错误

air_ticket_reservation_testing.employee_price.getprice(bool)':找不到合适的方法来覆盖

class price
{
    int iprice;
    public virtual int getprice()
    {
        iprice = 1000;
        return iprice;
    }
}
class pprice : price
{
    int iprice = 500;
    public override int getprice(int i)
    {
        return i;
    }
}

这是什么意思"返回base.getprice();"它来自汽车

class pprice : price
{
    int iprice = 500;
    public override int getprice(int i)
    {
        return base.getprice();
    }
}

2 个答案:

答案 0 :(得分:3)

您可以覆盖使用virtual关键字标记的方法/功能。您还可以使用new关键字覆盖方法/函数(由于无法维护和不可预测的调用,因此不建议这样做)。这也需要是具有相同签名的方法/函数,否则它将是overload。在你的情况下,覆盖应如下所示:

class pprice : price
{
    int iprice = 500;
    public override int getprice()
    {
        // do other stuff

        return base.getprice();
    }
}

类内的base关键字会反转到' base'类。使用此关键字,您可以从价格类别中调用protected / public properties / fields / methods / functions 。上面的示例代码调用base.getprice()方法。这是指价格类中的getprice()方法。

答案 1 :(得分:2)

如果整个签名完全匹配,则只能覆盖方法。否则你可以重载它(它创建一个名称相同但参数不同的方法)。

return base.getprice()只是调用你所覆盖的方法,以防你需要使用该代码(而不是在新方法中重新实现旧行为)。