メソッドや関数を呼び出すときに引数を渡す時がありますが、その引数の渡し方が値渡しであったり参照渡しであったりします。
値渡しと参照渡しの違い
では簡単に値渡しと参照渡しの違いにふれてみます。
値渡し
値渡しとは呼び出し元の変数をメソッドや関数に引数として渡して、呼ばれたメソッドや関数でその引数を操作しても呼び出し元の変数に影響しない引数の渡し方です。
参照渡し
参照渡しとは呼ばれたメソッドや関数で引数を操作することで呼び出し元の変数もメソッドや関数に操作された状態になる引数の渡し方です。
C#における引数の特徴
他言語、例えばC言語等では引数を意図的に値わたしにしたり、参照渡しにすることが可能です。
しかし、C#ではそのような方法では無く変数の型によって値渡しになったり、参照渡しになったりします。
基本的にオブジェクトを引数にすると参照渡しになり、その他のかたは値渡しになります。
なので、呼び出し元の変数を操作する場合は引数をオブジェクトにします。
引数を使ったサンプルコード
では値渡しと参照渡しのコードを書いてみます。
値渡し
void Atai() { string Tx = "あいうえお"; Console.WriteLine(Tx); } void AiatChild(string Tx) { Tx = Tx + "かきくけこ"; }
値渡しなので「あいうえお」が表示されます。
参照渡し
void Sansyo() { MyClass Obj = new MyClass(); Obj.Tx = "あいうえお"; SansyoChild(Obj); Console.WriteLine(Obj.Tx); } void SansyoChild(MyClass Obj) { Obj.Tx = Obj.Tx + "かきくけこ"; } class MyClass { public string Tx; }
参照渡しですから「あいうえおかきくけこ」と表示されます。
呼び出し元のオブジェクトが変化したのが確認できます。
コメント