2013-03-11 53 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準則。

相關問題