パラメータとして参照されているオブジェクトが関数で変更されている場合、refを使用するかどうかは重要ですか?次の2つの機能に違いはありますか?
void DisposeObject(ClassThing c)
{
c.Dispose();
}
void DisposeObject(ref ClassThing c)
{
c.Dispose();
}
パラメータとして参照されているオブジェクトが関数で変更されている場合、refを使用するかどうかは重要ですか?次の2つの機能に違いはありますか?
void DisposeObject(ClassThing c)
{
c.Dispose();
}
void DisposeObject(ref ClassThing c)
{
c.Dispose();
}
あなたの場合には依存しません。
しかし:
メソッド内にあるrefキーワードを使用して参照オブジェクトを渡すと、このタイプの別のオブジェクトを指すように参照を変更できます(メソッドの外部に表示されます)。
参照型パラメータを渡すための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()
。