オプション引数②
オプション引数がC#で長らく導入されてこなった詳しい経緯は不明ですが、私が想像するに「オーバーロードと機能がかぶるから」が一番の理由かなーと思っています。
オプション引数とオーバーロードを組み合わせてしまうと、当然挙動が分かりにくくなりますのでおすすめしませんが、あえてどういう挙動になるかだけ説明しておきます。
オーバーロードの優先順位は以下の通りです。
オプション引数無し → オプション引数あり → 可変長引数
private void test(int a, int b, int c = 4) { Console.WriteLine("オプション引数あり"); } private void test(int a, int b) { Console.WriteLine("オプション引数なし"); } private void test(params int[] a) { Console.WriteLine("可変長引数"); } test(1, 2); test(1, 2, 3); test(1, 2, 3, 4, 5, 6);
Private Sub test(ByVal a As Integer, ByVal b As Integer, Optional ByVal c As Integer = 4) Console.WriteLine("オプション引数あり") End Sub Private Sub test(ByVal a As Integer, ByVal b As Integer) Console.WriteLine("オプション引数なし") End Sub Private Sub test(ParamArray c As Integer()) Console.WriteLine("可変長引数") End Sub test(1, 2) test(1, 2, 3) test(1, 2, 3, 4, 5, 6)
オプション引数なし オプション引数あり 可変長引数