[C# 入門] メソッドを呼び出す際に引数を省略可能にする

メソッドは渡されたパラメーター(引数)を元に処理を行い、戻り値を返します。
メソッドを定義するときに引数を必須にするか、任意にするかを指定することができます。

メソッドを呼び出す際に任意の引数に値が指定されなかった場合は、既定値が設定されます。
ほとんど場合は既定値でいいけど、たまに違う値を指定したい、というときに使われます。

スポンサーリンク

任意引数の定義

引数の定義の際にデフォルト値を指定すると、任意の引数になります。
任意の引数のデフォルト値に指定できるは、数値リテラル文字リテラル、型の規定値(default)です。

class Program
{
    static void Method1(int number = 10)
    {
        System.Console.WriteLine(number);
    }

    public static void Main() 
    {
        // 引数を省略
        Method1();

        // 引数を指定
        Method1(20);
    }
}

出力結果はこんな感じです。

10
20

11行目は引数を省略してメソッドを呼び出しています。
この場合、メソッドの引数には既定値の10が設定されます。

14行目は引数を指定してメソッドを呼び出しています。
この場合は、20がメソッドに渡されます。

スポンサーリンク

複数の任意引数について

引数が複数あるメソッドの場合、任意の引数は必須の引数の後ろに定義する必要があります。
メソッド ( 必須引数、必須引数…、任意引数、任意引数… )という感じです。

メソッドを呼び出すときは必須の引数のところは値を指定し、任意の引数のところは省略が可能です。

class Program
{
    // 引数2、3が任意の引数
    static void Method1(int val1, int val2 = 99, string val3 = "abc")
    {
        System.Console.WriteLine($"val1={val1}, val2={val2}, val3={val3}");
    }

    public static void Main() 
    {
        Method1(10);                   // val2、val3 を省略
        Method1(10, 20);               // val3 を省略
        Method1(10, 20, "yasnote");    // すべての引数に値を指定

        // 引数名を指定して引数を設定
        Method1(val1:10, val2: 20, val3: "yasnote");
        Method1(10, val3: "yasnote");          
    }
}

メソッド ( 任意引数1、任意引数2 )というメソッドがあって任意引数2だけ値を指定して呼び出したい、という場合は引数名を指定して値を設定します。
書式は引数名と値をコロン : でつないで指定します。「引数名:値
上のサンプルコードの16、17行目になります。

17行目は引数val2を省略しています。

出力結果はこんな感じです。

val1=10, val2=99, val3=abc
val1=10, val2=20, val3=abc
val1=10, val2=20, val3=yasnote
val1=10, val2=20, val3=yasnote
val1=10, val2=99, val3=yasnote
スポンサーリンク

default 演算子

default演算子を使うと、型の規定値を生成できます。
defaultで構造体、クラスなどの任意引数の定義ができます。

class Program
{
    struct st 
    {
        public int a;
        public bool b;
        public string s;
    }
    class cls
    {
        public int x;
    }
    static void Method1(st val1 = default, cls val2 = default)
    {
        System.Console.WriteLine(val1.a);  // 0
        System.Console.WriteLine(val1.b);  // False
        System.Console.WriteLine(val1.s);  // null 

        System.Console.WriteLine(val2);    // null
    }

    public static void Main() 
    {
        Method1();
    }
}

クラスなどの参照型の規定値はnullなので使い道はあまりないかもしれませんが…


C# プログラミング講座に戻る

コメント

タイトルとURLをコピーしました