1

パラメータとして参照されているオブジェクトが関数で変更されている場合、refを使用するかどうかは重要ですか?次の2つの機能に違いはありますか?

void DisposeObject(ClassThing c)
{
   c.Dispose();
}

void DisposeObject(ref ClassThing c)
{
   c.Dispose();
}
4

3 に答える 3

6

それは問題ではありません。重要なのは、何かを割り当てるc(そしてメソッドの外に反映させたい)場合です。

c = new ClassThing();

その場合は、を使用しますref

于 2011-10-25T14:57:26.233 に答える
1

あなたの場合には依存しません。

しかし:

メソッド内にあるrefキーワードを使用して参照オブジェクトを渡すと、このタイプの別のオブジェクトを指すように参照を変更できます(メソッドの外部に表示されます)。

于 2011-10-25T14:58:24.900 に答える
0

参照型パラメータを渡すためのMSDNガイドによると:

参照型パラメーターを値で渡すと、クラスメンバーの値など、参照が指すデータを変更できます。ただし、参照自体の値を変更することはできません。つまり、同じ参照を使用して新しいクラスにメモリを割り当て、それをブロックの外部に保持させることはできません。これを行うには、refまたはoutキーワードを使用してパラメーターを渡します。

したがって、元のオブジェクトを変更することはできますが、メモリ内の別の場所を参照するように元のオブジェクトを変更することはできません。例:

static void Main()
{
    int[] integerArray = new int[8];
    foo(integerArray);
}

private void foo(int[] myArray)
{
    myArray[0] = 5;  //this changes integerArray
    myArray = new int[4]; //this does not change integerArray,
                          // ... but it would if you used ref or out
}

したがって、の動作については特にわかりませんが、違いは重要ですDispose()

于 2011-10-25T15:05:09.793 に答える