通过重写函数传递值时,在编译时遇到错误
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();
}
}
答案 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()
只是调用你所覆盖的方法,以防你需要使用该代码(而不是在新方法中重新实现旧行为)。