明らかに、リストを作成して「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
詳細については、値と参照型、およびパラメーターの受け渡しに関する私の記事を参照してください。