0

ここで何が問題なのか理解できないようです。pphと、両方が異なるオーバーロードで異なる値に等しい。何が間違っているのかわかりません。値がどのように同じかわかりません。

public class Pay
{
    public double ComputePay(double h,double pph,double with)
    {
        double net = 0;

        try
        {
            double gross = h * pph;
            net = gross - with;
        }
        catch (FormatException)
        {
            Console.WriteLine("Hour's cannot be less than zero");
        }

        return net;      
    }

    public double ComputePay(double h, double pph, double with = 0.15)
    {
        double net = 0;

        try
        {
            double gross = h * pph;
            net = gross - with;
        }
        catch (FormatException)
        {
            Console.WriteLine("Hour's cannot be less than zero");
        }

        return net;
    }

    public double ComputePay(double h, double pph = 5.85, double with = 0.15)
    {
        double net = 0;

        try
        {
            double gross = h * pph;
            net = gross - with;
        }
        catch (FormatException)
        {
            Console.WriteLine("Hour's cannot be less than zero");
        }

        return net;
    }
}
4

4 に答える 4

3

何が間違っているのかわかりません。

double3 つのパラメーターを持つ 3 つのメソッドがあります。

public double ComputePay(double h,double pph,double with)
public double ComputePay(double h, double pph, double with = 0.15)
public double ComputePay(double h, double pph = 5.85, double with = 0.15)

一部のメソッド宣言の一部のパラメーターがオプションであるという事実は、ここでのオーバーロードとは無関係です。そのような 3 つのメソッドを指定することはできません。呼び出し元が 3 つの引数を指定した場合、どのメソッドが呼び出されると予想されますか?

3 つのメソッドはすべて同じことを行うのに、なぜ 3 つのメソッドが必要なのですか? 最初の2つを取り除くだけです。

于 2013-03-11T15:22:51.627 に答える
1

同じ署名を持つ 2 つ以上のメソッドを持つことはできません。これは、同じ名前とパラメータ タイプを持つことはできないことを意味します。これは、メソッドに渡される値とは関係ありません。

正しい可能性があります:

public int Sum(int a, int b)
{
    return Sum(a, b, 0);
}

public int Sum(int a, int b, int c)
{
    return a + b + c;
}

編集:

これは、メンバーのオーバーロードに関するガイドラインを提供する興味深い MSDN 記事です。

于 2013-03-11T15:26:16.890 に答える
0

メソッドの署名 (double、double、double) は同じです。この場合、最初の 2 つの実装を削除するだけです。最後のものは、おそらくすでにあなたが望むように振る舞うでしょう。

于 2013-03-11T15:23:01.553 に答える
0

最後の 2 つの ComputePay (double、double、double) は同じです。デフォルト変数を持っていても、メソッドが異なるわけではありません。2番目のものを使用するだけで、準備完了です。

于 2013-03-11T15:24:04.993 に答える