「値渡し」と「参照渡し(ref、out)」(C#)

  • このエントリーをはてなブックマークに追加

スポンサーリンク

※サイト運営にサーバーは必須です※
~このサイトもエックスサーバーを使用しています~

引数の渡し方

引数の渡し方には、「値渡し」「参照渡し」の2つのパターンがあります。

「値渡し」とは、変数の値をコピーして、メソッドに渡すことを意味します。

メソッドに渡される値はあくまでコピーなので、メソッド内でコピーの値が変わったとしても、元の値に何も影響を与えません。

「参照渡し」とは、変数の参照情報を、メソッドに渡すことを意味します。

この場合、メソッドを呼び出す側と呼び出される側で、メモリー上の同じ領域を見ていることになります。

そのため、変数の値がメソッド内で変わった場合、メソッドの呼び出した側にも、その変更は反映されます。

値渡しの例

メソッドは、「値渡し」で基本的にやり取りされます。

ソースコード

実行結果

Plus5メソッド内での値は15
Plus5メソッド外での値は10

Plus5メソッドで、引数を通して渡された変数の値に+5します。

しかし、値が+5されるのはあくまで、コピーの値です。

元の変数iには何も影響を与えません。

参照渡しの例

参照渡しを行いたい場合は、パラメーター修飾子refまたはoutを使います。

ここでは、refを例に挙げます

ソースコード

実行結果

Plus5メソッド内での値は15
Plus5メソッド外での値は15

refキーワードはメソッドを呼び出す側と、メソッドの定義側の両方につける必要があります。

refとoutの違い

refキーワードを付けた変数は、メソッドを呼び出す側で、予め初期化して必要があります。

一方、outキーワードを付けた変数は、メソッドの内部で、値を定める必要があります。

ref
呼び出し元の変数に対して変更を加えたい場合(配列の順番操作などに有効)

out
複数のアウトプットをする必要がある場合(メソッドの戻り値が複数必要な場合、outを使えば、疑似的に実現できる)

refの例

ソースコード

実行結果

ソート前
2,7,5,3,1,8,6,
ソート後
1,2,3,5,6,7,8,

outの例

ソースコード

実行結果

直方体の面積は2200体積は6000

※C#7.0から引数を指定する部分で、outパラメーター付きの変数を宣言できるようになりました。

そのため、事前に変数の宣言を省いたコードが書けるようになりました。

ソースコード

実行結果

直方体の面積は2200体積は6000

オーバーロードに関すること

refキーワードが付いているメソッドは付いていないメソッドと別ものだと判断されてオーバーロードが可能です。

ただし、refキーワードとoutキーワードのみ異なるメソッドはオーバーロードできません。

ソースコード

実行結果

10
15

関連記事

Unityコースやアプリコースあり。無料体験の申込みあり。
  • このエントリーをはてなブックマークに追加

スポンサーリンク

コメントを残す

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)