2013-03-11 55 views
0

我似乎无法确定问题出在哪里。 pph,并且在不同的过载情况下都等于不同的值。我不确定我做错了什么。我不明白这些值是如何相同的。错误类型'Pay'已经定义了一个名为'ComputePay'的成员,其参数类型相同

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; 
    } 
} 

回答

3

我不知道我在做什么错。

你有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) 

,一些在某些方法声明的参数都是可选无关超载这里的事实 - 你根本就没有指定像这样的三种方法。如果调用者指定了三个参数,您希望调用哪种方法?

无论如何,你为什么要三种方法,因为他们都做同样的事情?只要摆脱前两个。

+0

谢谢这是我误读我的作业 – TheAce 2013-03-11 15:51:55

0

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

0

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

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准则。

相关问题