2012-06-13 42 views
4

我有3個方法。方法沒有過載'方法'有0個參數

1方法保持3000 1方法保持0.13

值和我已經創建了我想這兩個數字相乘在一起的另一種方法的值。

public override int FishPerTank() 
{     
    return 3000;     
} 

public override double WeightOut(double weightOut, double weightIn) 
{ 
    return 0.13; 
} 

public override int HowMuchTheFishWeighOutKG() 
{ 
    return (FishPerTank() * WeightOut()); 
} 

我收到的語法錯誤在這裏WeightOut:

public override int HowMuchTheFishWeighOutKG() 
{ 
    return (FishPerTank() * WeightOut()); 
} 
+0

@ClaudioRedi是正確的。另外,注意你乘以一個double(WeightOut),但是返回一個整數。你會失去小數位(不知道這是你想要的結果)。 –

+0

出於好奇....你爲什麼要使用覆蓋。這些特定方法是否存在於某些基類中作爲虛擬方法,以便它們需要被您的類的自定義版本覆蓋? – Nevyn

+1

@JasonDown--他不會失去精確度。他會得到一個編譯錯誤,因爲沒有從double到int的隱式轉換。 – hatchet

回答

13

WeightOut預計2個參數,你不爲他們提供

+3

這很重要。 – Yatrix

5

WeightOut(double weightOut, double weightIn)聲明瞭兩個參數,你就無人稱呼它。因此錯誤。

3

你可能想

public override double WeightOut(double weightOut, double weightIn) 
{ 
    return 0.13; 
} 

public override double WeightOut() 
{ 
    return 0.13; 
} 

因爲你沒有使用參數來改變。

也爲什麼重寫?如果刪除參數會導致另一個語法錯誤,或者在基類中修復它,可能需要刪除它。

5
WeightOut() 

需要兩個參數。但爲什麼 ?你不使用它們。

重寫你的方法,而不2個參數

public double WeightOut() 
{ 
    return 0.13; 
} 
+0

我在基類中使用2個參數,因爲它在那裏進行計算。 – Simagen

+0

在這種情況下,您必須使用這兩個參數,並且當您調用該方法時,您必須通過它們。另外,如果你想重用你的基類的代碼,你將不得不稱之爲'base.WeightOut(parameter1,parameter2)'。 –

相關問題