-3

我在程序中收到警告,即“Employee.Salaried.CalculatePay()”隐藏了继承的成员“Employee.Employee.CalculatePay()”。如果打算隐藏,请使用 new 关键字。为了这

    public double CalculatePay()
    {
        return ((AnnualSalary * (ManagementLevel * BONUS_PERCENT)) + AnnualSalary) / 52;
    }

有人对如何摆脱那里的警告有建议吗?

    public double CalculatePay()
    {
        return annualSalary / 52;
    }

    public double CalculatePay(double modifiedSalary)
    {
        AnnualSalary = modifiedSalary;
        return AnnualSalary / 52;
    }
4

3 回答 3

3

为避免这种情况,您必须将代码更改为类似

public class A
{
    public virtual void TADA()
    {

    }
}

public class B : A
{
    public override void TADA()
    {

    }
}

看一下

虚拟(C# 参考)

virtual 关键字用于修改方法、属性、索引器或事件声明,并允许在派生类中重写它。

调用虚拟方法时,将检查对象的运行时类型以查找覆盖成员。调用最派生类中的重写成员,如果没有派生类重写该成员,则该成员可能是原始成员。

默认情况下,方法是非虚拟的。您不能覆盖非虚拟方法。

覆盖(C# 参考)

需要 override 修饰符来扩展或修改继承的方法、属性、索引器或事件的抽象或虚拟实现。

于 2013-08-14T04:42:39.120 回答
0

您正在隐藏CalculatePay()基类的功能。如果这是您要执行的操作,请使用new修饰符将代码更改为:

new public double CalculatePay()
{
    return ((AnnualSalary * (ManagementLevel * BONUS_PERCENT)) + AnnualSalary) / 52;
}

http://msdn.microsoft.com/en-us/library/aa691135(v=vs.71).aspx

于 2013-08-14T04:43:45.973 回答
0

似乎父类(或它的父类)已经具有相同的函数CalculatePay(),所以如果你想覆盖它,只需将你的函数声明为覆盖:

public override double CalculatePay()
{
    return ((AnnualSalary * (ManagementLevel * BONUS_PERCENT)) + AnnualSalary) / 52;
}
于 2013-08-14T04:43:20.797 回答