オプション引数と名前付き引数

プログラミングC# 第6版 3.6.1


メソッドの引数はオプション引数にすることができます

using System;

class CSample {
    public void Foo (int i, int j=1, int k=2) {
        Console.WriteLine(i+j+k);
    }
}

class Program {    
    static void Main () {
        CSample cobj = new CSample();
        cobj.Foo(2);
    }
}

と・・・、思いきや、Visual C# 2008だとコンパイルエラーになりました!

どうやらC#4.0からの新機能だったみたいです。

ということでVisual C# 2010 Expressをインストールし直して試してみるとちゃんと動きました。

$ main
5

さてお次は名前付き引数を使って任意のオプション引数を呼んでみます。

using System;

class CSample {
    public void Foo (int i, int j=1, int k=2) {
        Console.WriteLine(i+j+k);
    }
}

class Program {    
    static void Main () {
        CSample cobj = new CSample();

        // 「仮引数名:値」と書くことで任意の引数が呼べる
        cobj.Foo(i:2, k:10);
    }
}
$ main
13

第二引数の「j」を飛ばして呼び出せてます。すごいですね。

もはや引数の順番を意識する必要がないという。

すごく便利だとは思いますが、但しこれメソッドの仮引数名を一度決めたら変更しにくいってことになりそうですねぇ。

もちろんコロコロ変えるなって話ですが、今までは名前を変更しても外部には影響がなかっただけに注意が必要ですね。