我似乎无法确定问题所在。 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;
}
}
答案 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)是一样的。拥有默认变量不会使方法不同。只需使用第二个就可以了。