第26章 可変長引数を持つメソッド


メソッドに可変長の引数を持たせることができます。



これには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型の数値の合計を求めるようにもしたいと思うのが人情でしょう。しかし、ちょっと困ることがあります。

引数なしの場合、どのバージョンのメソッドがわからないためコンパイルエラーとなります。 もちろん、使う側で引数なしの呼び出しを行わなければ、問題有りません。


[C# Index] [総合Index] [Previous Chapter] [Next Chapter]

Update 01/Sep/2006 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。