-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# リファレンス)

オーバーライド修飾子は、継承されたメソッド、プロパティ、インデクサー、またはイベントの抽象実装または仮想実装を拡張または変更するために必要です。

于 2013-08-14T04:42:39.120 に答える
0

親クラス (またはその親) には既に同じ関数 CalculatePay() があるようです。上書きしたい場合は、関数をオーバーライドとして宣言するだけです:

public override double CalculatePay()
{
    return ((AnnualSalary * (ManagementLevel * BONUS_PERCENT)) + AnnualSalary) / 52;
}
于 2013-08-14T04:43:20.797 に答える
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 に答える