2017-04-23 3 views
2

Ich möchte eine Methode überladen, die derzeit einen einzigen int Parameter verwendet. Die Überladungen werden stattdessen entweder double oder decimal.Ist es akzeptabel, dass überladene Methoden ihre Parameter umwandeln und dann ihre ursprüngliche Methode aufrufen?

Anstatt die Überladungen ihre Parameter an der Spitze und dann den exakt gleichen Code wie das Original, ist es akzeptabel für sie, das Original, wie dies nennen?

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

Wenn es Ihnen nichts ausmacht, Genauigkeit zu verlieren, dann ist das in Ordnung. –

+0

Yeah, @GillBates verliert die Präzision ist in Ordnung, aber es ist nicht als schlechte Praxis oder nichts? –

+1

Nein, ziemlich gute Praxis, da Sie Code wiederverwenden. –

Antwort

7

Ich denke nicht, dass es eine gute Idee ist, weil Sie wichtige Informationen des Anrufers verbergen. Wenn Sie nur eine int Überladung offen legen, kann der Aufrufer wählen, eine double zu einer int zu werfen, in dem Wissen, dass es auf eine ganze Zahl abgeschnitten wird. Aber wenn Sie eine Überladung exponieren, die eine double explizit nimmt, würde ich erwarten, dass double Wert hinzugefügt wird, nicht abgeschnitten.

Wenn Ihre Methode beim Gießen verliert Präzision, machen Sie es explizite, nicht in einer Überlastung versteckt.

+0

Ich dachte, dass OP fragt, ob 'AddToTotal ((int) x);' eine gute Implementierung im Gegensatz zu 'total + = (int) x;' war, aber das ist trotzdem eine gute Bemerkung. – kajacx

Verwandte Themen