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

C#のメソッドにパラメーターを渡す方法とは?値渡しの仕組みとサンプルコード

C#でメソッドにパラメーターを渡す基本的な方法のひとつが「値渡し(値パラメーター)」です。この仕組みでは、メソッドが呼び出されると、各値パラメーターに対して新しいストレージ領域が作成されます。

そして、呼び出し元の実際の引数の値がその新しい領域へコピーされます。そのため、メソッド内でパラメーターに対して行った変更は、呼び出し元の引数には一切影響しません。

値渡しのポイント

  • メソッド呼び出し時に、パラメーターごとに新しい記憶領域が確保される
  • 引数の値がコピーされるため、元の変数は保護される
  • メソッド内での変更は呼び出し元に反映されない

以下は、メソッドにパラメーターを渡す動作を確認できるサンプルコードです。

サンプルコード

using System;

namespace Demo {
    class NumberManipulator {
        public void swap(int x, int y) {
            int temp;
            temp = x;
            x = y;
            y = temp;
        }
        static void Main(string[] args) {
            NumberManipulator n = new NumberManipulator();
            int a = 50;
            int b = 150;
            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();
        }
    }
}

このコードでは、swap メソッドの中で変数 xy の値を入れ替えています。しかし、これはあくまでコピーされた値の入れ替えにすぎません。

実行結果

Before swap, value of a : 50
Before swap, value of b : 150
After swap, value of a : 50
After swap, value of b : 150

実行結果を見ると、swap メソッドを呼び出した後も、変数 ab の値は変わっていません。これが値渡しの特徴です。

補足:呼び出し元も変更したい場合

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

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

    C#では、パラメーターを受け取るメソッドを呼び出す際、引数をメソッドに渡す方法がいくつかあります。代表的な方法として「値パラメーター(値渡し)」と「参照パラメーター(参照渡し)」の2つがあります。それぞれの仕組みと動作の違いを詳しく見ていきましょう。 値パラメーター(値渡し) 値渡しでは、引数の実際の値が関数の仮引数にコピーされます。このとき、メソッドが呼び出されると各パラメーターごとに新しいストレージ領域が作成され、そこへ実引数の値がコピーされます。 そのため、メソッド内でパラメーターにどのような変更を加えても、呼び出し元の引数には一切影響しません。C#では、これが最も基本的なパラメーター

  2. Python関数の引数渡しの仕組みを解説!値渡しに見える理由とは

    Pythonでは、関数に引数を渡すとき、その動作が「値渡し(pass by value)」なのか「参照渡し(pass by reference)」なのか迷うことがあります。結論から言うと、Pythonの引数渡しは「オブジェクトへの参照渡し(pass by object reference)」です。ただし、オブジェクトの種類によって挙動が異なるため、「値渡しのように見える」ケースがあります。 サンプルコードの出力結果 b = 30 a = [10] この出力を見ると、変数aの値は関数呼び出し後も変わっていないように見えます。そのため「Pythonの引数は値渡しだ」と結論づけたくなりますが、実