web-dev-qa-db-ja.com

配列またはリストは、C#の参照によってデフォルトで渡されますか?

彼らですか?または、プログラムを高速化するには、参照渡しする必要がありますか?

74
Jorge Branco

参照が渡されます値による

.NETの配列はヒープ上のオブジェクトなので、参照があります。その参照は値によって渡されます。つまり、配列のcontentsへの変更は呼び出し元に見えますが、reassigningは配列を認識しません。

void Foo(int[] data) {
    data[0] = 1; // caller sees this
}
void Bar(int[] data) {
    data = new int[20]; // but not this
}

ref修飾子を追加すると、referenceが渡されますby reference--呼び出し元は上記のいずれかの変更を確認します。

189
Marc Gravell

それらは値で渡されます(refでもoutでもないすべてのパラメーターと同様)が、値isはオブジェクトへの参照なので、事実上参照で渡されます。

8
plinth

はい、C#ではデフォルトで参照渡しされます。 C#のすべてのオブジェクトは、値型を除きます。少し正確にするために、「値による参照」で渡されます。つまり、メソッドに表示される変数の値は、渡された元のオブジェクトへの参照です。これは小さなセマンティックポイントですが、時には重要になることがあります。

0
Paul Sonier