これは特定のプログラミング疑惑ではなく一般的なプログラミングの疑いです。しかし、私は例を挙げてそれを述べる。私自身のMessageBoxクラスを作成していて、.Show()
メソッドを21のオーバーロードで実装したいとします。私は以下のようにこれを行うことができます。C#でメソッドのオーバーロードを作成する簡単な方法はありますか?
public static void Show(string x){}
public static void Show(int x){}
public static void Show(param x){}
public static void Show(param2 x){}
public static void Show(string x, param y){}
.
.
.
.
public static void Show(param x, param y){}
このような方法を書くことはかなり面倒です。これを行う簡単な方法はありますか?何かのように、
public static void Show(string x, string y, int i, param p, ...... param21st z)
{
if (//see the arguments and decide)
//do stuff ignoring rest of the arguments;
else if (//passed arguments are of these type)
//then do this stuff.
else if (so and so)
// so and so.
}
注:私はそれはそれは別に書かれた21種類の関数のサイズを超えることができ、私の一つの機能はそれほど大きくすることはないだろうのような引数があることを知ってい 1。いいえ、私のケースでは、別々に書くことは、私が関数の下で実行する必要があることが非常に自明であることを考慮すると、より大きな面倒です(関数が多数のパラメータを取ることができるだけです)。さらに、この問題は、異なるコーディングテクニックについて知ることでもあります。 2.私が探している簡潔なスタイルは、私の場合、自分のために作っている趣味のプログラムのために、そのデメリットがあることを理解しています。それでは使い勝手の問題ではありません。ちょうど私は.Show()
メソッドを実行する必要があります。 (これにより、別々の関数を書くのが面倒になる)。
ありがとうございました。
これはこれを行う方法です。 .NETソースを見ると、マイクロソフトではほとんどのAPIで同じことをしています。 1つのメソッドに大量のパラメータを渡すことはひどい考えです。メソッドを正常に実行するには実際に何が必要なのか把握するのが難しいので、一般的にメンテナンスの悪夢です。さまざまな値が渡される異なるケースに対して、パラメータビルダとして機能するオブジェクトのセットを作成することができます(より良い用語がないため)。 –
@Sergey Akopovはい私はそれを完全に理解しています。ありがとうございました。私の場合、趣味のプログラムのために私は自分のために作成しています。それでは使い勝手の問題ではありません。私は実装にもっと興味があります。私はあなたのコメントの2番目の部分を理解していませんでした。私はコードを参照する必要があります.. – nawfal
あなたは趣味のプログラムのために書くコードでユーザビリティはまだ重要です - あなたが数ヶ月または数年後にコードに戻ったらどうなりますか? –