2017-04-23 82 views
2

我希望超載一個方法,該方法當前只需要一個參數int。 重載將採取doubledecimal重載方法可以接受它們的參數,然後調用它們的原始方法嗎?

而不是重載在頂部投入它們的參數,然後具有與原始的完全相同的代碼,他們可以接受這樣的原件嗎?

int total = 0; 

public void AddToTotal(int x) 
{ 
    total += x; 
} 

public void AddToTotal(double x) 
{ 
    AddToTotal((int)x); 
} 

public void AddToTotal(decimal x) 
{ 
    AddToTotal((int)x); 
} 
+0

如果你不在乎失去精確度,那很好。 –

+0

是的,@GillBates失去了精度是好的,但它不被認爲是不好的做法或任何東西? –

+1

因爲您重複使用代碼,所以不是很好的做法。 –

回答

7

我不認爲這是個好主意,因爲你隱藏了來電者的重要信息。 如果您僅顯示int過載,則調用者可以選擇將double投射到int,並知道它將被截斷爲整數。但是如果你公開一個明顯需要double的超載,我預計double值將被添加,而不是被截斷。

如果您的方法在投射時失去精確度,請將其設爲顯式,而不是隱藏在過載內。

+0

我以爲OP詢問是否AddToTotal((int)x);'是一個很好的實現,而不是'total + =(int)x;',但這是一個很好的評論。 – kajacx

相關問題