C#のメソッドでパラメータを値渡しする方法をわかりやすく解説
値渡し(値によるパラメータ渡し)は、C#でメソッドにパラメータを渡す際のデフォルトの仕組みです。
値渡しの仕組み
この仕組みでは、メソッドが呼び出されると、各値パラメータに対して新しいストレージ領域が作成されます。そして、実引数(呼び出し元で渡された変数)の値がその領域にコピーされます。
そのため、メソッド内部でパラメータの値をどれだけ変更しても、呼び出し元の変数には一切影響しません。これは値渡しの重要な特徴です。
サンプルコード
以下は、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; /* tempの値をyに代入 */
}
static void Main(string[] args) {
NumberManipulator n = new NumberManipulator();
/* ローカル変数の定義 */
int a = 100;
int b = 200;
Console.WriteLine("入れ替え前のaの値 : {0}", a);
Console.WriteLine("入れ替え前のbの値 : {0}", b);
/* 値を入れ替えるメソッドを呼び出し */
n.swap(a, b);
Console.WriteLine("入れ替え後のaの値 : {0}", a);
Console.WriteLine("入れ替え後のbの値 : {0}", b);
Console.ReadLine();
}
}
}実行結果
入れ替え前のaの値 : 100 入れ替え前のbの値 : 200 入れ替え後のaの値 : 100 入れ替え後のbの値 : 200
結果のポイント
swapメソッド内では確かにxとyの値が入れ替わっていますが、実行結果を見ると、呼び出し元の変数aとbの値は入れ替え前後で変わっていません。
これは、メソッドに渡されたのは変数の「値のコピー」であり、元の変数そのものではないためです。もし呼び出し元の変数も変更したい場合は、refキーワードやoutキーワードを使った参照渡しを利用します。
-
C#で変数への参照を割り当てる方法|refキーワードの使い方
refキーワードによる参照渡しの基本C#で変数への参照を割り当てるには、refキーワードを使用します。参照パラメータとは、変数が格納されているメモリ上の場所への参照のことです。値渡しの場合とは異なり、参照渡しで引数を渡すときには新しいストレージ領域は作成されません。つまり、呼び出されたメソッドは呼び出し元の変数そのものを直接操作することになります。参照パラメータは、メソッドの宣言側と呼び出し側の両方でrefキーワードを使って指定する必要があります。値渡しとの違い通常の値渡しでは引数のコピーがメソッドに渡されるため、メソッド内で値を変更しても呼び出し元の変数には影響しません。一方、参照渡しでは変
-
【C#入門】パラメーターの渡し方を解説!値渡しと参照渡しの違いとは?
C#では、パラメーターを受け取るメソッドを呼び出す際、引数をメソッドに渡す方法がいくつかあります。代表的な方法として「値パラメーター(値渡し)」と「参照パラメーター(参照渡し)」の2つがあります。それぞれの仕組みと動作の違いを詳しく見ていきましょう。 値パラメーター(値渡し) 値渡しでは、引数の実際の値が関数の仮引数にコピーされます。このとき、メソッドが呼び出されると各パラメーターごとに新しいストレージ領域が作成され、そこへ実引数の値がコピーされます。 そのため、メソッド内でパラメーターにどのような変更を加えても、呼び出し元の引数には一切影響しません。C#では、これが最も基本的なパラメーター