C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.41329 の関連記事表示

<< 0 >>
■41329  Re[1]: C#における値渡しと参照渡しのコーディングについて
□投稿者/ 魔界の仮面弁士 -(2009/09/17(Thu) 21:44:21)
    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); の方が意図が伝わりやすい。
記事No.41320 のレス /過去ログ71より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -