引数の順番を入れ替えてメソッドを呼び出す / 引数を明示的に指定してメソッドを呼び出す - 名前付き引数の利用 - C#

C#で名前付き引数を利用するコードを紹介します。

概要

一般的なプログラミング言語では関数やメソッドの呼び出し時に、関数宣言された順番に引数を与えて記述します。
下記のメソッドが宣言されている場合を考えます。
  private string Proc(int a, int b, int c)
  {
  }
上記のメソッドを呼び出す場合通常は下記のコードのように記述します。この場合、呼び出し先のメソッドの変数a4の値が代入され、bには2 cには3 の値が代入されます。通常はメソッド/関数呼び出し時に与えた引数の順番通りに呼び出し先のメソッド/関数の引数が設定されます。
  Proc(4, 2, 3);
その一方で、引数の意味がコード中には記述されていないため、コードの可読性が落ちるといった問題もあります。また、当初宣言された引数の順番通りに値を渡さないほうが、意味的にコードが読みやすくなる。といった例もあります。この記事では、「名前付き引数」を利用して、引数の順番を入れ替えてメソッドを呼び出す方法、引数を明示的に指定してメソッドを呼び出す方法を紹介します。

書式

メソッドの呼び出し時に以下の書式を利用します。
メソッド名(引数名:値, 引数名:値, 引数名:値, ...... 引数名:値);
引数名には呼び出し先のメソッドの引数の変数名を記述します。引数名を指定することでメソッドで宣言された順番通りでなくてもメソッドの呼び出しができます。

プログラム例

WindowsFormアプリケーションを作成します。

UI

下図のUIを作成します。ボタンと複数行のテキストボックスを1つずつ配置します。

コード

下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace NamedArguments
{
  public partial class FormSimpleNamedArguments : Form
  {
    public FormSimpleNamedArguments()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      //従来の呼び出し方
      //string ret = ProcStr("ぺんぎんクッキー", "ProductName", "->");

      string ret = ProcStr(token: "->", key: "ProductName", name: "ぺんぎんクッキー");

      textBox1.Text += ret;
    }

    private string ProcStr(string name, string key, string token)
    {
      return key + " " + token + " " + name;
    }
  }
}

解説

ProcStrメソッドはname key token の3つの引数を持つメソッドです。
下記のコードにより「名前付き引数」を利用して ProcStrメソッドを呼び出しています。下記の記述により、
  • token引数に->
  • key引数にProductName
  • name引数にぺんぎんクッキー
を与えています。
  string ret = ProcStr(token: "->", key: "ProductName", name: "ぺんぎんクッキー");

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。テキストボックスに ProductName -> ぺんぎんクッキー の文字列が表示されます。コードで指定した値が正しく引数に代入されて、ProcStrメソッドが呼び出されたことが確認できます。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2021-08-16
作成日: 2018-05-22
iPentec all rights reserverd.