目次

ニュース

日記カテゴリ

書庫

2006/10/19 10:00 追記
お恥ずかしながら、
間違っていました。


ボックス化を知らなかった時は
次のようなメソッドの違いがわかりませんでした。

1.
int GetIntValue(int value)
{
?return value + 10;
}


2.
void GetIntValue(ref int value)
{
?value += 10;
}


void
Test()
{
?int i=0;
?i = GetIntValue(i);
???
?int j=0;
?GetIntValue(ref j);
}


Call側で 二回変数名を書くのが面倒くさかったので
1.
i = GetIntValue(i);
ではなく

2.
GetIntValue(ref j);
をよく利用していました。

 

けど内部の動作がわかってくると

2.
GetIntValue(ref j);
は値型を参照型に変換するために、
ボックス化されマネージヒープにオブジェクトが確保される。


1.
i = GetIntValue(i);
はマネージヒープにメモリは確保されない。

 

ということで
値型を参照渡しする場合は、
GCの対象になってしまうオブジェクトが生成されてしまうので
気をつけて利用した方がよさそうですね。

投稿日時 : 2006年10月19日 0:11
Feedback
  • # re: int GetIntValue(int value) と void GetIntValue(ref int value)の違い
    囚人
    Posted @ 2006/10/19 0:31
    あれ?そうなんですか?

    値型の値を参照渡ししているだけであって、参照型に変換していないのでボックス化されないと思っています。

    ボックス化されちゃうと呼び出し側に値が返りませんが…。
  • # re: int GetIntValue(int value) と void GetIntValue(ref int value)の違い
    まどか
    Posted @ 2006/10/19 10:12
    リンク先の「ボックス化とボックス化解除についての説明」の文章
    "値型を参照型に変換すること"でいいんじゃないかな。

    >ということで値型を参照渡しする場合は、
    もしかして、値型、参照型、値渡し、参照渡しがごっちゃになってるのかな?
  • # re: int GetIntValue(int value) と void GetIntValue(ref int value)の違い
    ゆき
    Posted @ 2006/10/19 10:22
    >まどかさん
    ごっちゃになってました。
    お恥ずかしい。

    >囚人さん
    >まどかさん
    ご指摘ありがとうございました。

    >このエントリをいて??となった皆様へ
    どうも申し訳ありませんでした。
    次からはまっとうな情報を流しせるよう
    ちゃんと勉強してきます。
タイトル  
名前  
Url
コメント   

Blog 利用状況