オプション引数①
メソッドの引数を省略、既定値を設定できる機能をオプション引数と呼びます。
オプション引数はC++やVB.NETでは昔からありましたが、C#では.NET Framework4.0から初めて導入されました。
オプション引数
C#は引数に既定値を設定するとオプション引数となります。
private void test(int a, int b, int c = 4) { Console.WriteLine(a + b + c); } test(1, 2, 3); //6 test(1, 2); //7
VB.NETではOptionalキーワードをつけます。
Private Sub test(ByVal a As Integer, ByVal b As Integer, Optional ByVal c As Integer = 4) Console.WriteLine(a + b + c) End Sub test(1, 2, 3) '6 test(1, 2) '7
オプション引数の制限
オプション引数は後ろの引数のみが有効です。上記の例であればaをオプションにしてbとcを通常、といったことは出来ません。以下のようにすると、「省略可能なパラメーターはすべての必須パラメーターの後で指定する必要があります」といったエラーが表示されます。
private void test(int a = 4, int b, int c) { Console.WriteLine(a + b + c); }
C#のみ、可変長引数だけはオプション引数の後ろでも設定可能です。
private void test(int a, int b = 4, params int[] c) { Console.WriteLine(a + b + c.Length); } test(1, 2, 3, 4, 5, 6);
名前付き引数
引数の名前から指定することが可能です。よって、オプション引数を含んでいても、引数の順番は自由に書くことが出来ますし、省略も可能となります。
private void test(int a, int b, int c = 4) { Console.WriteLine(a + b + c); } test(c: 1,a: 2,b: 3);
Private Sub test(ByVal a As Integer, ByVal b As Integer, Optional ByVal c As Integer) Console.WriteLine(a + b + c) End Sub test(c:=1, a:=2, b:=3)
しかし、名前付きオプション引数は拡張・保守の観点から非常にリスキーなのでおすすめしません。