C#のメソッドで使える3種類のパラメーター(値渡し・参照渡し・出力)を徹底解説
C#におけるメソッドとは、プログラム内で特定の処理をまとめたコードブロックのことです。メソッドを使うことで、同じコードを何度も書き直す必要がなくなり、メモリの無駄な消費を抑えられるだけでなく、開発時間の短縮にもつながります。さらに、処理を部品化することでコード全体の可読性が大きく向上する点も大きなメリットです。
メソッドを実行する際、その処理を完了させるために外部から値を受け取りたいケースはよくあります。このようにメソッドに渡される入力値のことをパラメーター(引数)と呼びます。
C#では、パラメーターをメソッドに渡す方法として、主に以下の3種類が用意されています。
- 値パラメーター(Value Parameters:値渡し)
- 参照パラメーター(Reference Parameters:参照渡し)
- 出力パラメーター(Output Parameters:out パラメーター)
値パラメーター(値渡し)
値パラメーターでは、引数の「実際の値」が仮引数にコピーされます。単純な変数をメソッドに渡す場合、通常はこの値渡しになります。つまり、呼び出し元の変数が持つ値がメソッド側の変数へ複製されるため、メソッド内でその値を変更しても、呼び出し元の元の変数には一切影響しません。
int や double、bool といったプリミティブ型の多くは、この値渡しで受け渡しされます。
コード例
using System;
namespace MyApplication{
public class Program{
public static void Main(){
int x = 5, y = 5;
Console.WriteLine($"Value before calling the method. x = {x}, y = {y}");
ValueParamter(x, y);
Console.WriteLine($"Value after calling the method. x = {x}, y = {y}");
}
public static void ValueParamter(int x, int y){
x = 10;
y = 10;
int z = x + y;
Console.WriteLine($"Sum of x and y = {z}");
}
}
}実行結果
Value before calling the method. x = 5, y = 5 Sum of x and y = 20 Value after calling the method. x = 5, y = 5
この例では、メソッド内で x と y を 10 に書き換えていますが、メソッド呼び出し後も Main 側の x と y は 5 のままです。これは値がコピーされただけであり、元の変数とは独立しているためです。
参照パラメーター(ref:参照渡し)
参照パラメーターでは、引数の値そのものではなく、「その値が格納されているメモリ上の場所(参照)」が仮引数にコピーされます。C#ではオブジェクトは基本的に参照渡しでメソッドに渡されます。メソッドは渡された変数の値ではなく参照を操作するため、メソッド内での変更が呼び出し元の変数に直接反映されます。
参照渡しを行うには、仮引数と実引数の両方に ref キーワードを付ける必要があります。
コード例
using System;
namespace MyApplication{
public class Program{
public static void Main(){
int x = 5, y = 5;
Console.WriteLine($"Value before calling the method. x = {x}, y = {y}");
RefParamter(ref x, ref y);
Console.WriteLine($"Value after calling the method. x = {x}, y = {y}");
}
public static void RefParamter(ref int x, ref int y){
x = 10;
y = 10;
int z = x + y;
Console.WriteLine($"Sum of x and y = {z}");
}
}
}実行結果
Value before calling the method. x = 5, y = 5 Sum of x and y = 20 Value after calling the method. x = 10, y = 10
先ほどの値渡しの例と異なり、メソッド呼び出し後に x と y の値が 10 に変わっています。これは ref によって変数への参照が渡され、メソッド内の変更が呼び出し元に反映されたためです。
出力パラメーター(out)
出力パラメーターは、1つのメソッドから複数の値を返したい場合に役立ちます。return ステートメントで返せる値は1つだけですが、out パラメーターを使えば、戻り値とは別に複数の値を呼び出し元へ返すことができます。
out パラメーターに渡す変数は、事前に初期化しておく必要がないのも特徴です。データをメソッドの外へ「出力」する方向で受け渡す点が、参照パラメーターとの大きな違いです。
コード例
using System;
namespace MyApplication{
public class Program{
public static void Main(){
int result;
OutParamter(out result);
Console.WriteLine($"Result: {result}");
}
public static void OutParamter(out int result){
int x = 10, y = 10;
result = x + y;
}
}
}実行結果
Result: 20
この例では、Main 側で result 変数を初期化せずに宣言している点に注目してください。out パラメーターであれば未初期化の変数を渡すことができ、メソッド内で代入された値がそのまま呼び出し元に返されます。
まとめ
- 値パラメーター:値のコピーが渡されるため、メソッド内の変更は呼び出し元に影響しない。
- 参照パラメーター(ref):変数への参照が渡されるため、メソッド内の変更が呼び出し元に反映される。事前の初期化が必要。
- 出力パラメーター(out):メソッドから複数の値を返したいときに便利。事前の初期化は不要。
用途に応じてこれら3種類のパラメーターを使い分けることで、より柔軟で読みやすいC#のコードを書くことができます。
-
PythonのID演算子「is」「is not」とは?オブジェクトの同一性を比較する方法
PythonにおけるオブジェクトのIDとは Pythonでは、すべてのオブジェクトがメモリ上に格納される際に、一意の識別番号(ID)が割り当てられます。このIDは、組み込み関数 id() を使うことで取得できます。 is 演算子の働き is 演算子は、2つのオブジェクトの id() を比較する演算子です。両者が同じIDを持っている場合(つまり、同じオブジェクトを参照している場合)には True を返し、そうでなければ False を返します。 is not 演算子の働き 一方、is not 演算子はその逆の動作をします。2つのオブジェクトの id() が同じ場合には False を、異なる
-
Pythonで使える引用符の種類と使い方をわかりやすく解説
Pythonにおける引用符の基本Pythonでは、文字列(string)オブジェクトを作成する際に引用符を使用します。Pythonが認識できる引用符は、シングルクォート()、ダブルクォート()、そしてトリプルクォート( または )の3種類です。文字列リテラルは、一連の文字をシングルクォート(hello)、ダブルクォート(hello)、またはトリプルクォート(hello や hello)で囲むことで記述できます。どの引用符を使っても、生成される文字列オブジェクトはまったく同じものになります。>>> var1=hello >>> var1 hello >&