C#の値パラメーター・参照パラメーター・出力パラメーターの違いを徹底解説
C#では、メソッドに引数を渡す方法として「値パラメーター」「参照パラメーター」「出力パラメーター」の3種類があります。それぞれの仕組みと挙動の違いを理解することは、バグの少ない効率的なコードを書くうえで非常に重要です。本記事では、それぞれの特徴をコード例とともにわかりやすく解説します。
値パラメーター(値渡し)
値パラメーターは、引数の実際の値をコピーしてメソッドの仮引数に渡す方式です。このため、メソッド内でパラメーターに行った変更は、呼び出し元の引数には一切影響しません。
C#において、これはパラメーターを渡す際のデフォルトの仕組みです。メソッドが呼び出されると、各値パラメーターに対して新しい記憶領域が確保され、実引数の値がそこにコピーされます。その結果、メソッド内でどれだけ値を変更しても、元の変数は変更されません。
void UpdateValue(int num)
{
num = 100; // コピーされた値を変更しても元の変数には影響しない
}
int x = 10;
UpdateValue(x);
Console.WriteLine(x); // 出力: 10
参照パラメーター(ref)
参照パラメーターは、変数のメモリ上のアドレスへの参照を渡す方式です。値パラメーターと異なり、新しい記憶領域は作成されません。参照パラメーターは、メソッドに渡された実引数と同じメモリ位置を指し示すため、メソッド内での変更が直接呼び出し元の変数に反映されます。
参照パラメーターを宣言するには、refキーワードを使用します。なお、refパラメーターに渡す変数は、メソッドを呼び出す前に必ず初期化しておく必要がある点に注意してください。
void UpdateValue(ref int num)
{
num = 100; // 呼び出し元の変数自体が変更される
}
int x = 10;
UpdateValue(ref x);
Console.WriteLine(x); // 出力: 100
出力パラメーター(out)
通常、returnステートメントで返せる値は1つだけです。しかし、出力パラメーターを利用すれば、1つのメソッドから複数の値を返すことができます。
出力パラメーターは参照パラメーターとよく似ていますが、データをメソッドへ渡すのではなく、メソッドの外へデータを出力するために使われる点が異なります。宣言にはoutキーワードを使用します。
outパラメーターには以下のような特徴があります。
- 呼び出し前に変数を初期化しなくてもよい
- メソッド内で必ず値を代入する必要がある(未代入のままメソッドを抜けるとコンパイルエラーになる)
- C# 7.0以降では、呼び出し時に変数をインラインで宣言できる
void GetMinMax(int[] numbers, out int min, out int max)
{
min = numbers.Min();
max = numbers.Max();
}
int[] data = { 5, 12, 3, 8, 21 };
GetMinMax(data, out int minValue, out int maxValue);
Console.WriteLine($"最小値: {minValue}, 最大値: {maxValue}");
// 出力: 最小値: 3, 最大値: 21
3つのパラメーターの比較まとめ
| 種類 | キーワード | 初期化の必要性 | 主な用途 |
|---|---|---|---|
| 値パラメーター | なし(デフォルト) | 必要 | 値を読み取るだけで変更不要の場合 |
| 参照パラメーター | ref | 必要 | メソッド内外で双方向にデータを受け渡す場合 |
| 出力パラメーター | out | 不要 | メソッドから複数の値を返したい場合 |
用途に応じてこれら3つのパラメーターを使い分けることで、より安全で可読性の高いC#プログラムを実現できます。特に「戻り値が複数必要な場面ではout」「呼び出し元の変数を更新したい場面ではref」という基本ルールを覚えておくとよいでしょう。
-
JavaScriptでテキストボックスに値を出力する方法をわかりやすく解説
JavaScriptでテキストボックスに値を出力したい場合は、input要素が持つvalueプロパティを利用します。ユーザーが入力した値を取得し、処理結果を別のテキストボックスのvalueに代入することで、画面への出力が可能になります。 ここでは、2つの数値を入力してその合計を表示するシンプルなサンプルを紹介します。 サンプルコード <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewp
-
C#の値型と参照型の違いを徹底解説!メモリの仕組みとサンプルコードで比較
C#におけるすべての型は、大きく分けて「値型」と「参照型」という2つのカテゴリに分類されます。この2つの違いを正しく理解することは、バグの防止やパフォーマンスの最適化において非常に重要です。本記事では、それぞれの型の特徴、動作の仕組み、そして実際のコード例を使った挙動の違いについて詳しく解説します。 値型とは 値型の変数は、データそのものを直接保持します。各変数が独自のデータコピーを持つため、ある変数の値を変更しても、別の変数やオブジェクトには一切影響しません。 C#における値型には、以下のようなものがあります。 int、float、double などのすべての数値型 char 型および b