hakeの日記

Windows環境でプログラミングの勉強をしています。

C# - 引数 - 規定値/名前付き引数/可変長引数

メソッド定義の仮引数に規定値を付けると、メソッド呼び出し時にその引数を省略することができる。ただし仮引数の並びで、規定値有りの引数の後ろに規定値無しの引数を置くことはできない。

また、メソッド呼び出し時に

        仮引数名 : 値

とすることで仮引数の順番に関係なく値を渡すことができる。

更に、仮引数にparamsし配列を置くことで可変長の値を受け取ることができる。可変長引数に渡す値がなくてもエラーにならない。ただし可変長引数は、仮引数リストの最後に置かなければならない。

        params  型[]  可変長仮引数名

 


using System;

//メソッドの引数
//  規定値、名前付き引数、可変長引数


class MyMain
{
    public static void Main(string[] args)
    {
        Sub1(10, 20, 30); // arg1 = 10, arg2 = 20, arg3 = 30
        //引数を省略(規定値を使用)
        Sub1(50, 60);     // arg1 = 50, arg2 = 60, arg3 = 3
        Sub1(100);        // arg1 = 100, arg2 = 2, arg3 = 3
        //Sub1();         // エラー、定義上、第1引数は省略できない
        
        //名前付き引数
        Sub1(arg1:200, arg3:300); // arg1 = 200, arg2 = 2, arg3 = 300

        Console.WriteLine("-----");
        Sub2(1);
        Sub2(1, 2, 3);
        Sub2(1, 2, 3, 4, 5);
    }


    //第2,第3引数に規定値を付ける
    private static void Sub1(int arg1, int arg2 = 2, int arg3 = 3)
    {
        Console.WriteLine("arg1 = {0}, arg2 = {1}, arg3 = {2}", arg1, arg2, arg3);
    }

    //可変長引数で受け取る
    private static void Sub2(int arg1, int arg2 = 0, params int[] args)
    {
        Console.WriteLine("arg1 : {0}", arg1);
        Console.WriteLine("arg2 : {0}", arg2);
        Console.Write("args : ");
        foreach(var e in args)
        {
            Console.Write("{0} ", e);
        }
        Console.WriteLine("\n-----");
    }
}

 

実行結果

arg1 = 10, arg2 = 20, arg3 = 30
arg1 = 50, arg2 = 60, arg3 = 3
arg1 = 100, arg2 = 2, arg3 = 3
arg1 = 200, arg2 = 2, arg3 = 300
-----
arg1 : 1
arg2 : 0
args :
-----
arg1 : 1
arg2 : 2
args : 3
-----
arg1 : 1
arg2 : 2
args : 3 4 5
-----