Использует ли C # существующие объекты, которые не были уничтожены GC? - PullRequest
1 голос
/ 08 декабря 2011

У меня есть объект с именем MyObject.Это обеспечивает некоторую деловую операцию и не содержит никаких данных.В исходном коде я инициализирую его для выполнения некоторых операций:

MyObject myObj = new MyObject();

в другом месте я инициализирую новый с другим именем:

MyObject BuObj = new MyObject();

Если myObj не был уничтожен GCтогда MyObject тоже.Поэтому, когда я инициализирую BuObj, C # повторно использует MyObject для BuObj вместо инициализации нового?

Ответы [ 3 ]

5 голосов
/ 08 декабря 2011

Необходимо различать переменную (myObj) и объект, на который ссылается значение переменной. Переменная никогда не может быть собрана сборщиком мусора - только объекты могут.

Но нет, .NET не будет повторно использовать тот же объект: вы запросили новый, поэтому он создаст новый.

(Существует один крошечный угловой регистр с точки зрения создания пустых строк, где оператор new возвращает ссылку на существующий объект, но вы можете в большинстве случаев игнорировать это.)

3 голосов
/ 08 декабря 2011

Нет, он создаст новый.C # /. Net GC не использует существующие объекты, а только уничтожает их.

То, о чем вы говорите, называется пулом объектов;если вы хотите использовать эту концепцию, вам придется самостоятельно реализовать эту функцию или найти существующую библиотеку, которая делает это.Но «новый» все равно будет создавать только новый объект.

0 голосов
/ 08 декабря 2011

Короче говоря, C # не использует объекты повторно.

...