2

私のC#コードでは、4つのデータ配列を作成しました。

double[] values;
DateTime[] timestamps;
long[] qualities;
long[] reasons;

これらの配列は、外部APIに渡す必要があります。APIメソッドの呼び出しはやや間接的です。その署名はのように見えますinvokeApiMethod(string apiMethodName, Object[] apiMethodParams)

この場合、外部APIメソッド呼び出しは、私がすでに構築した種類の4つの配列を想定しています。

次のコードを使用してObject[]を作成すると、次のようになります。

Object[] apiMethodParams = { values, timestamps, qualities, reasons };

これにより、4つの既存のアレイすべてが新しいメモリの大きな連続ブロックにコピーされますか?または、C#は既存の配列への参照の配列を外部APIに渡すだけですか?

4

3 に答える 3

4

これにより、既存の 4 つの配列すべてが新しいメモリの大きな連続ブロックにコピーされることになりますか? それとも、C# は既存の配列への参照の配列を外部 API に渡すだけでしょうか?

後者。これは 4 つの要素の配列になり、その各要素が参照になります。などの値はvalues、配列へのtimestamps単なる参照です。

外部 API が配列の内容を変更し、元の値が必要な場合は、配列の一部またはすべてのコピーを取得することをお勧めします、これは自動的には行われません。

于 2012-05-10T05:51:01.277 に答える
1

http://www.mbaldinger.com/post/C-reference-types-are-passed-by-value!.aspx

http://answers.yahoo.com/question/index?qid=20090105141923AAt63hD

別の配列を渡す必要がある場合は、それを複製/コピーしてから、複製/コピーした配列を渡す必要があります

于 2012-05-10T05:54:33.667 に答える
0

それらは参照です。コピーと作成には「new」キーワードを使用します。

于 2012-05-10T06:21:25.150 に答える