■No41320 (simano さん) に返信 > しかし、実際には、「値渡し」「参照渡し」というコーディングする上で > 頻発する場面で、 そもそも「頻発」するかどうかと問われると、 ほとんどの場合、値渡ししか使わないと思います。参照渡しが必要になるケースは稀かと。 実際、.NET Framework を見ても、"out" や "ref" を伴うメソッドは、そう多くはないですし。 基本前提として 値渡し では、メソッド内で仮引数のオブジェクトを差し替えても、実引数(呼び出し元の変数)は『同じオブジェクトのまま』。 参照渡しでは、メソッド内で仮引数のオブジェクトを差し替えると、実引数(呼び出し元の変数)も指し替わる。 だと思います。 ≪参照型を【値渡し】する≫ t = this.textBox1; ByValMethod(t); → (メソッド内で、Text プロパティの内容が編集される可能性はあるかも知れないが) メソッド実行後に、『t が別のテキストボックスを指している可能性は無い』。同じまま。 ≪参照型を{参照渡し}する≫ t = this.textBox1; ByRefMethod(ref t); → メソッド実行後に、t が別のテキストボックスを指している可能性が高い。 (t のインスタンスを差し替えないのであれば、値渡しで充分) ≪値型を【値渡し】する≫ p = this.textBox1.Location; ByValMethod(p); → 値のコピーを渡しているのだから、『p が別の値になっている可能性は無い』。同じまま。 ≪値型を{参照渡し}する≫ p = this.textBox1.Location; ByRefMethod(ref p); → メソッド実行後に、p に別の位置が格納されている可能性が高い。 (p の値を入れ替えないのであれば、値渡しで充分) → メソッドによる値の修正を目的とするなら、p = Foo(p); の方が意図が伝わりやすい。
- Child Tree -