メソッドに可変長の引数を持たせることができます。
これには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