メソッド(関数)の引数の参照渡し - C#

メソッド(関数)の引数の参照渡しについて紹介します。

概要

こちらの記事では、関数呼び出し時の引数の値渡しについて紹介しました。この記事では「参照渡し」の方法と動作について紹介します。

書式

メソッド(関数の宣言)

関数の宣言部の引数に ref を記述します。
アクセス修飾子 メソッド名(ref 引数型1 引数名1, .... ref 引数型n 引数名n)

メソッドの呼び出し部分

関数の呼び出しの引数に ref を記述します。
メソッド名(ref 引数1, .... ref 引数n)

書式例

メソッド(関数の宣言)

  private int myfunc(ref int param1, ref int param2, int param3)
  {
    ...
  }

メソッドの呼び出し部分

  myfunc (ref value1, ref value2, value3);

プログラム例

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

UI


コード

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 PassingArgsByReference
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      int x = 120;
      int y = 40;
      int z = Add(ref x, ref y);

      textBox1.Text += string.Format("x:{0:d}\r\n", x);
      textBox1.Text += string.Format("y:{0:d}\r\n", y);
      textBox1.Text += string.Format("z:{0:d}\r\n", z);
    }

    private int Add(ref int a, ref int b)
    {
      int c = a + b;
      a = a + 100;
      b = b + 100;
      return c;
    }
  }
}

解説

Addメソッド(関数)にa,b2つの引数を与えて呼び出します。aとbの和が戻り値として返ります。テキストボックスに、Addメソッドに与えたパラメーターと関数からの戻り値の値を表示します。また、Addメソッドでは、aとbの和を計算した後、a,bそれぞれの値に100を加算しています。
refが指定されているため、パラメーターは参照渡しとなります。Addメソッドに渡されたパラメーターは呼び出し元の変数を参照したものであり、Addメソッド中で変更があると、呼び出し元の変数にも変更が反映されます。今回の例では、それぞれのパラメーターに100を加算しているため、呼び出し元の変数 a,b にも100が加算されることになります。

実行結果

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


[button1]をクリックします。テキストボックスに下図の値が表示されます。aとbの和である戻り値zの値は160であり、値呼び出しの場合と変わりません。一方、参照渡しで関数を呼び出したためAddメソッド中でa,bに加算された値は、呼び出し元のx,y変数の値にも反映され、xは220、yは140の値になります。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2017-04-17
iPentec all rights reserverd.