関数への参照によってデータメンバーを渡し、その関数の実行中にガベージコレクターが実行を開始し、データメンバーを含むオブジェクトをメモリ内に移動するとどうなりますか?参照によってデータメンバーを渡す
class SomeClass
{
int someDataMember;
void someMethod()
{
SomeClass.someFunction(ref someDataMember);
}
static void someFunction(ref int i)
{
i = 42;
int[] dummy = new int[1234567890];
// suppose the Garbage Collector kicks in here
i = 97;
}
}
ガベージコレクション中に参照パラメータが無効にならないようにするにはどうすればよいですか?彼らはクラス参照のように調整されていますか?
[C#パラメータの参照と.netガベージコレクション]の可能な複製(http://stackoverflow.com/questions/2500851/c-sharp-parameters-by-reference-and-net-garbage-collection) –
Eric @ rightfoldのリンクされた質問に対するLippertの答えはこれを完全に答えている。 –
メソッドパラメータがルートとみなされ、すべてのルーツが調整されるため、調整されます(「C#を使用したCLR」を参照してください) –