これにはparamsキーワードを使います。
戻り値の型 メソッド名(普通のパラメータ,..., params データ型[] 仮引数の名前){}のように、使います。paramsキーワードのついた引数が可変長となります。
形からもわかるように可変長の引数の配列となります。従って、ここに配列の参照を 書いても大丈夫です。また、長さ0の配列でもかまいません。params引数の後ろにさらに 他の引数をとることはできません。
サンプルを見ると使い方は簡単であることがわかります。
// params01.cs using System; class MyAdd { int sum; public int add(params int[] x) { sum = 0; for (int i = 0; i < x.Length; i++) sum += x[i]; return sum; } } class params01 { public static void Main() { MyAdd ma = new MyAdd(); Console.WriteLine("{0} + {1} + {2} = {3}", 1, 10, 5, ma.add(1, 10, 5)); Console.WriteLine("引数なしの時 = {0}", ma.add()); Console.WriteLine("{0} + {1} + {2} + ({3}) + {4} = {5}", 2, 4, 6, -8, 10, ma.add(2, 4, 6, -8, 10)); int[] ar = new int[3] { 2, 8, 10 }; Console.WriteLine("配列の要素の合計 = {0}", ma.add(ar)); } }MyAddクラスには、インスタンスフィールドのsumと、addメソッドがあります。
addメソッドの引数はparamsキーワードのついたint型引数です。これで、可変長のint型の引数を 取ることができます。
addメソッドの中では、まずsumを0にしています。sumは、引数の合計を格納します。メソッドが呼ばれるたびに0にしておかないと、前回の合計が残っているのでまずいですね。
引数の合計を求めるには、ここではfor文を使っています。引数の個数はLengthプロパティを使えばわかりますね。
呼び出し側のMainメソッドでは、まずMyAddクラスのインスタンス化を行い、ma.add(...)で引数の合計を求めています。引数なしの場合は、0が返されるはずです。
また、最後に配列の参照を渡しています。これで、配列の要素の合計が求まるはずです。
では、実行結果を見てみましょう。
さて、ここでaddメソッドをオーバーロードして、double型の数値の合計を求めるようにもしたいと思うのが人情でしょう。しかし、ちょっと困ることがあります。
引数なしの場合、どのバージョンのメソッドがわからないためコンパイルエラーとなります。 もちろん、使う側で引数なしの呼び出しを行わなければ、問題有りません。
Update 01/Sep/2006 By Y.Kumei