C#のメソッドでパラメーターを参照渡しする方法(refキーワードの使い方)
C#における参照パラメーター(reference parameter)とは、変数が格納されているメモリ上の場所への参照のことです。値渡し(value parameter)の場合とは異なり、参照渡しでパラメーターをメソッドに渡しても、新しいストレージ領域は作成されません。
つまり、参照パラメーターは、メソッドに渡された実際の引数と同じメモリ位置を共有します。そのため、メソッド内でパラメーターの値を変更すると、呼び出し元の変数の値も同時に変更されます。
参照渡しの基本構文
パラメーターを参照渡しするには、refキーワードを使用します。refキーワードは、メソッドの宣言側と呼び出し側の両方で指定する必要がある点に注意してください。
サンプルコード:2つの値を入れ替える
以下の例では、refキーワードを使って参照パラメーターを宣言し、2つの整数値を入れ替える(スワップする)方法を示しています。
using System;
namespace CalculatorApplication {
class NumberManipulator {
public void swap(ref int x, ref int y) {
int temp;
temp = x; /* xの値を保存 */
x = y; /* yの値をxへ代入 */
y = temp; /* tempの値をyへ代入 */
}
static void Main(string[] args) {
NumberManipulator n = new NumberManipulator();
/* ローカル変数の定義 */
int a = 100;
int b = 200;
Console.WriteLine("Before swap, value of a : {0}", a);
Console.WriteLine("Before swap, value of b : {0}", b);
/* 値を入れ替える関数を呼び出し */
n.swap(ref a, ref b);
Console.WriteLine("After swap, value of a : {0}", a);
Console.WriteLine("After swap, value of b : {0}", b);
Console.ReadLine();
}
}
}実行結果
Before swap, value of a : 100 Before swap, value of b : 200 After swap, value of a : 200 After swap, value of b : 100
コードのポイント
- メソッド宣言時:public void swap(ref int x, ref int y) のように、仮引数にrefを付けます。
- メソッド呼び出し時:n.swap(ref a, ref b) のように、実引数にもrefを付けます。
- swapメソッド内でxとyの値を入れ替えると、呼び出し元のaとbも同じメモリ位置を参照しているため、実際に入れ替わります。
このように、refキーワードを使った参照渡しを利用すれば、メソッド内での変更を呼び出し元に反映させることができます。複数の戻り値が必要な場合や、大きなデータ構造をコピーせずに処理したい場合などに有効なテクニックです。
-
Python関数で引数を参照渡しする方法を徹底解説
Python関数で引数を参照渡しする方法 PythonにはC++のような明示的なポインタや参照渡しの構文はありませんが、実際には「オブジェクトへの参照」が引数として渡される仕組み(オブジェクト参照渡し)を採用しています。特にリストや辞書といったミュータブル(変更可能)なオブジェクトを関数に渡すと、関数内での変更が呼び出し元の変数にも反映されます。 サンプルコード def modify_list(lst): lst.append(20) # 関数内でリストを変更する a = [10] modify_list(a) # 変数aをそのまま渡す(参照が渡される) b = [10,
-
Pythonの関数は引数を参照渡しする?id()による検証方法を解説
Pythonの関数における引数の受け渡しの仕組みPythonでは、関数の引数は常に参照渡し(正確には「オブジェクトへの参照を受け渡す」方式)で行われます。つまり、関数に渡されるのはオブジェクトそのものではなく、そのオブジェクトへの参照です。この挙動は、実際の引数・仮引数・戻り値の各オブジェクトに対してid()を確認することで簡単に検証できます。検証用サンプルコードdef foo(x): print (id of received argument,id(x)) x.append(20) return x a = [10] print (id of a