0

明らかに、リストを作成して「new object()」で埋めると、オブジェクトのメモリが格納されますが、既に定義されているオブジェクトのみで構成されるリストを作成すると、このリストは本質的にリストになりますか?ハンドルの、またはすべてのデータ/メモリがリストにコピーされますか?

コードをよりクリーンに記述できるように知りたいだけです。実際にメモリをコピーしている場合は、メモリのコピーを作成したくないため、別の方法で処理します。これにより、ラグが発生します。

あなたの答えは配列にも当てはまりますか?

4

1 に答える 1

4

明らかに、リストを作成して「new object()」で埋めた場合、オブジェクトのメモリが格納されます。

いいえ、オブジェクトへの参照を格納しています。C# の任意の式の値は、値型の値、参照、またはポインターです。決して実物ではありません。

したがって、この:

List<object> objects = new List<object>();
objects.Add(new object());

これと同等です:

List<object> objects = new List<object>();
object foo = new object();
objects.Add(foo);

どちらの場合も、リストにはオブジェクトへの参照が含まれます。これはリストの場合だけではありません。基本的に、参照がコピーされるものなら何でも、割り当て、パラメーターの受け渡しについて理解することが重要です。簡単な例として:

StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = sb1;
// sb1 and sb2 now have the same value: a *reference* to an object
sb2.Append("Hello");
Console.WriteLine(sb1); // Prints Hello

詳細については、値と参照型、およびパラメーターの受け渡しに関する私の記事を参照してください。

于 2012-08-11T08:14:52.133 に答える