いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

C#4.0の追加機能-04(オプション引数と名前付け引数, optional parameter, named parameter)


今回は、オプション引数と名前付け引数についてです。


元々、Visual Basic等では存在していた機能がやっとC#にも
追加されました。



オプション引数は、文字通り特定の引数をオプション扱いとする機能。
名前付け引数は、引数を指定する際に、値とともに引数名を指定して
設定する機能です。


それぞれ以下のようにして記述します。

[オプション引数の例]

void OptionalParamsMethod(string word1 = "", string word2 = "", string word3 = "") {
    Console.WriteLine("{0}, {1}, {2}", word1, word2, word3);
}


上記の例では、2番目と3番目の引数がオプション引数となっています。
呼び出す際は、

OptionalParamsMethod("word1", "word2", "word3");
OptionalParamsMethod("word1", "word2");
OptionalParamsMethod("word1");
OptionalParamsMethod();

という呼び方が出来ます。注意点として引数のオプション値として
指定できるのは定数値となります。


名前付け引数は、引数指定時に引数の名前を指定します。

// 2番目の引数のみを設定して呼び出し.
OptionalParamsMethod(word2: "hoge");

// 1番目と3番目のみを設定して呼び出し
// 且つ、指定する際は3番目、1番目という順序で指定
OptionalParamsMethod(word3: "word3", word1: "word1");

名前の指定方法は、以下の通りです。

引数の名前: 値

以下、サンプルです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NamedAndOptionalParameters01 {

    class Program {

        static void Main(string[] args) {
            (new Program()).Execute();

            Console.WriteLine("Press any key to exit...");
            Console.ReadLine();
        }

        private void Execute() {

            ///////////////////////////////////////////////////////////////////////////
            //
            // オプション引数
            //
            // 利用方法は、Visual Basicのoptionalとほぼ同じ.
            // 指定されていないパラメータの場合は、メソッド定義で設定した初期値が設定される。
            //

            // 全ての引数を指定.
            OptionalParamsMethod("word1", "word2", "word3");
            
            // 最後の引数を省略.
            OptionalParamsMethod("word1", "word2");

            // 最初の引数以外を省略.
            OptionalParamsMethod("word1");

            // 全ての引数を省略
            OptionalParamsMethod();

            ///////////////////////////////////////////////////////////////////////////
            //
            // 名前付き引数
            //
            // Visual BasicやPython等の言語でおなじみの機能
            // 指定したい引数の名前とともに値を設定して
            // 設定したいパラメータのみを指定したり出来る。
            // また、名前を付けて呼ぶので、引数の指定順序も
            // 好きに出来る。
            //
            // 名前を指定する場合は以下の書式で行う。
            //      引数名: 値
            //
            
            // 2番目の引数のみを設定して呼び出し.
            OptionalParamsMethod(word2: "hoge");

            // 1番目と3番目のみを設定して呼び出し
            // 且つ、指定する際は3番目、1番目という順序で指定
            OptionalParamsMethod(word3: "word3", word1: "word1");

        }

        // optional引数を持つメソッド.
        void OptionalParamsMethod(string word1 = "", string word2 = "", string word3 = "") {
            Console.WriteLine("{0}, {1}, {2}", word1, word2, word3);
        }
    }
}