错误1类型“支付”已经定义了一个名为“ComputePay”的成员,其成员具有相同的参数类型

时间:2013-03-11 15:20:39

标签: c# overloading

我似乎无法确定问题所在。 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 个答案:

答案 0 :(得分:3)

  

我不确定我做错了什么。

你有三种方法都有三个double参数:

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)

某些方法声明中的某些参数是可选的这一事实与此处的重载无关 - 您根本无法指定这样的三种方法。如果调用者指定了三个参数,您希望调用哪种方法?

为什么你还想要三种方法,因为它们都做同样的事情?摆脱前两个。

答案 1 :(得分:1)

您不能拥有两个或多个具有相同签名的方法。这意味着它们不能具有相同的名称和参数类型。这与将传递给方法的值无关。

正确可能是:

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文章,提供有关Member Overloading的指南。

答案 2 :(得分:0)

您的方法签名(double,double,double)是相同的。在这种情况下,只需删除前两个实现。最后一个很可能已经按照你想要的方式行事。

答案 3 :(得分:0)

你的最后两个ComputePay(double,double,double)是一样的。拥有默认变量不会使方法不同。只需使用第二个就可以了。