C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#で変数への参照を割り当てる方法|refキーワードの使い方


refキーワードによる参照渡しの基本

C#で変数への参照を割り当てるには、refキーワードを使用します。参照パラメータとは、変数が格納されているメモリ上の場所への参照のことです。

値渡しの場合とは異なり、参照渡しで引数を渡すときには新しいストレージ領域は作成されません。つまり、呼び出されたメソッドは呼び出し元の変数そのものを直接操作することになります。参照パラメータは、メソッドの宣言側と呼び出し側の両方でrefキーワードを使って指定する必要があります。

値渡しとの違い

通常の値渡しでは引数のコピーがメソッドに渡されるため、メソッド内で値を変更しても呼び出し元の変数には影響しません。一方、参照渡しでは変数そのものへの参照が渡されるため、メソッド内での変更がそのまま呼び出し元に反映されます。複数の値を一度に更新したい場合などに特に有効な手法です。

サンプルコード:refキーワードで2つの値を入れ替える

以下の例では、refキーワードを使って、2つの整数型ローカル変数の値を入れ替える(スワップする)方法を示しています。

using System;

namespace Demo {
    class Program {
        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) {
            Program p = new Program();

            /* ローカル変数の定義 */
            int a = 99;
            int b = 110;

            Console.WriteLine("入れ替え前のaの値 : {0}", a);
            Console.WriteLine("入れ替え前のbの値 : {0}", b);

            /* 値を入れ替えるメソッドを呼び出し */
            p.Swap(ref a, ref b);

            Console.WriteLine("入れ替え後のaの値 : {0}", a);
            Console.WriteLine("入れ替え後のbの値 : {0}", b);

            Console.ReadLine();
        }
    }
}

実行結果

入れ替え前のaの値 : 99
入れ替え前のbの値 : 110
入れ替え後のaの値 : 110
入れ替え後のbの値 : 99

押さえておきたいポイント

  • 参照渡しにはメソッドの宣言側と呼び出し側の両方refキーワードを指定する必要があります。
  • refで渡す変数は、メソッドを呼び出す前に必ず初期化しておく必要があります。
  • 参照渡しでは新しいストレージ領域が作成されないため、メソッド内での変更が呼び出し元の変数に直接反映されます。
  • この仕組みを活用すると、戻り値を使わずに複数の値を同時に更新できます(例:2つの値のスワップ)。

  1. Pythonで辞書の値を変数に代入する方法【初心者向け解説】

    Pythonでは、アクセス演算子 [] を使うことで、辞書(ディクショナリ)に格納された値を簡単に変数へ代入できます。キー名を指定して対応する値を取り出すのが基本の使い方です。基本的な例:辞書の値を変数に代入するまずは、辞書の値を取得して新しい変数に代入してみましょう。my_dict = { foo: 42, bar: 12.5 } new_var = my_dict[foo] print(new_var)出力結果42このように、my_dict[foo] と記述することで、キー foo に紐づく値 42 を取り出し、変数 new_var に代入できています。応用例:既存のキー

  2. Pythonで変数への参照(リファレンス)は作成できる?C/C++との違いを徹底解説

    はじめに:PythonとC/C++では「変数」の意味が違う Pythonにおける変数の概念は、CやC++とは根本的に異なります。C/C++では、変数とはメモリ上の特定の場所(アドレス)に付けられた名前のことです。そのため、ある変数の値を別の変数に代入しても、値が別のメモリ領域へコピーされるだけで、両者は互いに独立した存在となります。 int x = 5; int y = x; 例えばC++では、& 演算子を使うことで、宣言された変数のメモリアドレスを取得できます。 cout << x << &x << y << &y; こ