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