2017-04-23 4 views
2

現在、単一のintパラメータを使用するメソッドをオーバーロードします。 オーバーロードの代わりに、doubleまたはdecimalのいずれかが使用されます。オーバーロードされたメソッドがパラメータをキャストしてから元のメソッドを呼び出すことは可能ですか?

オーバーロードでは、パラメータを上にキャストして元のコードとまったく同じコードを使用するのではなく、元のものを呼び出すことはできますか?

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オーバーロードしか公開されていない場合は、doubleintにキャストして、整数に切り捨てることができます。しかし、doubleを明示的に使用するオーバーロードを公開した場合は、doubleの値が切り捨てられずに追加されることが予想されます。

キャスト時に精度が失われた場合は、を明示的ににして、オーバーロード内に隠さないようにします。

+0

OPは 'AddToTotal((int)x);'が 'total + =(int)x;'とは対照的に良い実装であるかどうかを質問していたと思っていましたが、これは関係なく良い発言です。 – kajacx

関連する問題