今回は、C#でメソッドへ引数を渡す際の『値渡し』と『参照渡し』の違いについてご紹介します。
値渡し
メソッドへ値をコピーして渡すため、引数に指定した元の値は変化しません。
値渡しを行うために、呼び出されるメソッド側でキーワードを指定する必要はありません。
メソッド名(変数名)
サンプル
それではサンプルを見てみましょう。
Console.WriteLineを使って、値渡しでメソッドを実行した後の、引数に指定した変数の値をコンソールに出力します。
1 2 3 4 5 6 7 8 9 10 11 12 |
static void Main() { int a = 1; test(a); Console.WriteLine(a); } static void test(int a) { a = a * 10; } |
実行結果
上記を実行し、コンソールに表示された結果がこちらです。
実行結果
1
testメソッドを実行した後も、引数に指定した元の変数「a」の値は変化していないのがわかります。
参照渡し
メソッドへ値が入った場所(アドレス)を渡すため、メソッドの中で値が変化すると元の値も変更されます。
参照渡しを行うには、メソッドを呼び出す際と、呼び出されるメソッド側に「ref」キーワードを指定する必要があります。
【呼び出す際】
メソッド名(ref 引数)
【呼び出されるメソッド】
メソッド名(ref 変数名)
サンプル
それではサンプルを見てみましょう。
Console.WriteLineを使って、参照渡しでメソッドを実行した後の、引数に指定した変数の値をコンソールに出力します。
1 2 3 4 5 6 7 8 9 10 11 12 |
static void Main() { int a = 1; test(a); Console.WriteLine(a); } static void test(ref int a) { a = a * 10; } |
実行結果
上記を実行し、コンソールに表示された結果がこちらです。
実行結果
10
testメソッドを実行後、引数に指定した元の変数「a」の値も変化しているのがわかります。
最後に
C#で『メソッドへ引数を渡す際の「値渡し」と「参照渡し」の違い』についてのご紹介は以上です。
どなたかのお役に立てていれば幸いです。
関連記事