C#のメソッドの引数のデフォルト値・名前付き引数・可変長引数

C#のメソッドの引数のデフォルト値・名前付き引数・可変長引数

1142 回閲覧されました

みなさんこんにちは、jonioです。

今回はC#のメソッドの引数の書き方のメモの記事です。

それではメモの開始です。

 

メソッドに引数がある場合

まずはメソッドに引数がある場合です。

↓のコードを考えます。

これで「私は村人です」と出力されます。

次はメソッドに引数がない場合ですが7行目の「”村人”」がない場合ですがこういう場合はデフォルト値を使います。

 

デフォルト値

↓のコードを考えます。

7行目に引数を入れない場合はIntroduceメソッドの呼び出し元の10行目の引数に値の指定をします。

「string name = “村人”」の「“村人”」です。

↓の様にデフォルト値を設定しても引数がある場合はそれが優先されこの場合は「いさじです」と表示されます。

 

引数の書く順番

引数にデフォルト値を使わない場合と使う場合が混ざった呼び出し元のメソッドを書く時は注意しないといけません。

↓のコードを考えます。

10行目のIntroduceメソッドの引数ですがgreetingはデフォルト値を設定していません。

この場合に今のコードだとエラーになります。

理由はIntroduceメソッドの引数の並び順でデフォルト値がない引数がデフォルト値がある引数の前に来てないからです。

だから正しいコードは↓になります。

 

名前付き引数

↓の様に呼び出すメソッドの引数を1つだけ指定します。

7行目のSayHelloメソッドですが引数は1つしか指定していません。

この場合の10行目のメソッドに対応する引数はgreetingになり引数は前から順番に対応させます。

例えば7行目のメソッドの引数にaとbがあったとして10行目のメソッドの引数にa’とb’とc’があったとするとa’に対応するのがaでb’に対応するのがbになります。

この考え方だと引数同士の自由な対応ができないので不便ですが「名前付き引数」を使えば引数を対応させる事ができます。

コードを↓にします。

名前付き引数は7行目の「greeting:”こんにちは”,target:”みなさん”」のgreetingとtargetです。

10行目のメソッドの引数のどれに対応させるかを7行目の様に指定します。

この書き方でも↓の様に引数のデフォルト値がある引数とない引数を混在させてもいいです。

 

可変長引数

呼び出し元のメソッドの引数の個数と呼び出すメソッドの引数の個数が同じでない場合は引数を使うことはできません。

例えば↓です。

8行目のメソッドの引数が3 つで13行目のメソッドの引数が1つなので今のままではエラーになります。

こんな場合は可変長(かへんちょう)引数を使えば引数の個数が一致していなくてもエラーになりません。

コードを↓にします。

11行目のstringの前に「params」を付ければ可変長引数になります。

この場合の出力結果は「私はjonioです」改行して「私は勇者です」改行して「私は戦士です」改行して「私は魔法使いです」になります。