【C#】参照パラメーター(ref) と出力パラメーター (out) とは

C#には参照パラメーターと出力パラメーターというものがあります。 なんとなくどういったことができるかはわかるのですが、よくわからない部分もあるので勉強をしてみることにしました。

参照パラメーター ref

まずは、参照パラメーターです。 これが、引数を参照渡しをすることができます。 [c] // 参照渡しをする場合には、引数にref修飾子をつけます。 public void addSum (ref int num) { num = 100 + num; Debug.LogError ("値: " + num); } [/c]

これをインスタンス化をして利用します。 [c] var addSum = new outTest (); int a = 100;

Debug.Log ("a:" + a); addSum.addSum (ref a); Debug.Log ("結果 a:" + a);

// a:100 // 値: 200 // 結果 a: 200 [/c]

ref修飾子をつけた場合、引数が 参照渡しになります。 メソッドでプラスされた値が結果として帰ってきます。

値渡し

ref修飾子をつけない通常のメソッドの場合はどうなるのでしょうか? [c] public void addSum (int num) { num = 100 + num; Debug.LogError ("値: " + num); }

var addSum = new outTest (); int a = 100;

Debug.Log ("a:" + a); addSum.addSum (a); Debug.Log ("結果 a:" + a);

// a:100 // 値: 200 // 結果 a: 100 [/c]

引数は値として渡されるだけですので、int型aの数字は変わりません。

このように、引数の値をメソッド内で変更できるのが参照渡しなのです。 詳しくはこちらを参考に。 引数の参照渡し - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

出力パラメーター out

出力パラメーターも、先ほどの参照パラメーターと同じように、引数に修飾子をつけて利用します。 参照パラメーターとの違いは、参照パラメーターが引数に利用する変数を初期化して利用しなくてはいけないのに対し、出力パラメーターは初期化をしないでも利用ができます。 メソッドから値を受け取りたいが、値を渡したくない場合に利用をします。

[c] public void addSum (out int num) { num = 100; Debug.LogError ("値: " + num); }

var addSum = new outTest (); int a; //初期化しない

addSum.addSum (out a); Debug.Log ("結果 a:" + a);

// 値: 200 // 結果 a: 100 [/c]

独習C# 第3版独習C# 第3版
ハーバート・シルト,エディフィストラーニング株式会社 矢嶋聡

翔泳社
売り上げランキング : 19359

Amazonで詳しく見る