メソッド(関数)の引数の参照渡しについて紹介します。
こちらの記事では、関数呼び出し時の引数の値渡しについて紹介しました。この記事では「参照渡し」の方法と動作について紹介します。
関数の宣言部の引数に ref を記述します。
関数の呼び出しの引数に ref を記述します。
private int myfunc(ref int param1, ref int param2, int param3)
{
...
}
myfunc (ref value1, ref value2, value3);
Windows Formアプリケーションを作成します。
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の値になります。