2011-12-08 29 views
1

我有一个名为MyObject的对象。它提供了一些业务操作并且不包含任何数据。在源代码中,我初始化它做一些操作:C#是否重用尚未被GC销毁的现有对象?

MyObject myObj = new MyObject(); 

在其他地方,我初始化一个新的不同的名字:

MyObject BuObj = new MyObject(); 

MyObject来过如果MyObj中并没有被破坏的GC然后。所以当我初始化BuObj的时候,C#是否重用了MyObject for BuObj而不是初始化一个新的?

+2

这几乎就像_ [如果一棵树落在森林里,没有人会听到它](http://en.wikipedia.org/wiki/If_a_tree_falls_in_a_forest)_... – Smudge202

回答

3

没有,它会创建一个新的一个。 C#/ .Net GC不重用现有对象,只会破坏它们。

你在说什么叫做对象池;如果你想利用这个概念,你必须自己暗示这个功能,或者找到一个现有的库。但“新”仍然只会创造一个新的对象。

0

总之,没有C#不会重用任何对象。

5

您需要区分变量myObj)和变量值引用的对象。 A 变量永远不会被垃圾收集 - 只有对象可以。

但是不,.NET不会重复使用同一个对象:您已经要求一个新对象,所以它会创建一个新对象。

(有创建空字符串,其中new运营商恰好返回引用现有对象而言一个小角落的情况下,但你可以大都忽略。)

+0

没错。 MyObj是一个变量,其中包含在堆上分配的对象的地址。 – PraveenLearnsEveryday

+2

@PraveenLearnsEveryday:那么,包含对该对象的引用。引用的形式可能是内存地址,但在逻辑上它只是“导航到对象的某种方式”。 –