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

【C#入門】パラメーターの渡し方を解説!値渡しと参照渡しの違いとは?

C#では、パラメーターを受け取るメソッドを呼び出す際、引数をメソッドに渡す方法がいくつかあります。代表的な方法として「値パラメーター(値渡し)」と「参照パラメーター(参照渡し)」の2つがあります。それぞれの仕組みと動作の違いを詳しく見ていきましょう。

値パラメーター(値渡し)

値渡しでは、引数の実際の値が関数の仮引数にコピーされます。このとき、メソッドが呼び出されると各パラメーターごとに新しいストレージ領域が作成され、そこへ実引数の値がコピーされます。

そのため、メソッド内でパラメーターにどのような変更を加えても、呼び出し元の引数には一切影響しません。C#では、これが最も基本的なパラメーターの渡し方です。

参照パラメーター(参照渡し)

参照渡しでは、引数の値そのものではなく、引数が格納されているメモリ上の場所への参照が仮引数にコピーされます。つまり、メソッド内でパラメーターに行った変更が、呼び出し元の引数にも反映されます。C#では ref キーワードを使用することで、参照渡しを実現できます。

サンプルコード:値パラメーターの動作確認

以下は、C#における値渡しの挙動を確認するサンプルです。swap メソッド内で2つの変数の値を入れ替えていますが、呼び出し元の変数には影響しないことを確認できます。

using System;

namespace CalculatorApplication {
   class NumberManipulator {
      public void swap(int x, int y) {
         int temp;

         temp = x; /* x の値を保存 */
         x = y;    /* y の値を x に代入 */
         y = temp; /* 保存しておいた値を y に代入 */
      }

      static void Main(string[] args) {
         NumberManipulator n = new NumberManipulator();

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

         Console.WriteLine("Before swap, value of a : {0}", a);
         Console.WriteLine("Before swap, value of b : {0}", b);

         /* 値を入れ替えるためにメソッドを呼び出す */
         n.swap(a, 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 : 7
Before swap, value of b : 10
After swap, value of a : 7
After swap, value of b : 10

結果の解説

実行結果を見ると、swap メソッドを呼び出した後も、変数 ab の値は入れ替わっていません。これは、値渡しではメソッド内での変更が呼び出し元に反映されないためです。

もしメソッド内での変更を呼び出し元にも反映させたい場合は、ref キーワードを使った参照渡しを使用します。用途に応じて値渡しと参照渡しを使い分けることで、より安全で意図通りのプログラムを書くことができます。

  1. C#のrefパラメーターとoutパラメーターの違いとは?使い分けのポイントを解説

    C#には、メソッドに引数を渡す際に変数そのものへの参照を渡すための仕組みとして、「refパラメーター」と「outパラメーター」の2種類が用意されています。どちらも呼び出し元の変数の値をメソッド内から直接操作できる点は共通していますが、初期化の要否や代入のルール、想定される用途に違いがあります。本記事では、サンプルコードを交えながら、両者の違いをわかりやすく解説します。 refパラメーター(参照パラメーター)とは refパラメーターは、変数のメモリ上の場所(参照)をそのまま渡す仕組みです。通常の値渡しとは異なり、新しいストレージ領域は作成されません。そのため、メソッド内で行った変更が、そのまま呼

  2. Pythonの主なデータ型変換関数まとめ|int・float・str・listなどの使い方を実例付きで解説

    Pythonには、あるデータ型から別のデータ型へ値を変換するための組み込み関数が多数用意されています。この記事では、数値変換やコレクション変換に使える主要なデータ変換関数を、実際の実行例とともにわかりやすく解説します。 数値データの変換関数 int():整数への変換 浮動小数点数や、整数を表す文字列を整数(int)オブジェクトに変換します。文字列を変換する場合は、第2引数に基数を指定することで、8進数や16進数の文字列を整数に変換することもできます。 >>> int(11) 11 >>> int(11.15) 11 >>> int(2