我有一个名为MyObject的对象。它提供了一些商务操作,不包含任何数据。在源代码中,我将其初始化以执行一些操作:
MyObject myObj = new MyObject();
在其他地方我用不同的名称初始化一个新的:
MyObject BuObj = new MyObject();
如果myObj没有被GC销毁,那么MyObject也是如此。所以当我初始化BuObj时,C#重用MyObject for BuObj而不是初始化一个新的吗?
答案 0 :(得分:5)
您需要区分变量(myObj
)和变量值引用的对象。 变量永远不会被垃圾收集 - 只有对象可以。
但不,.NET不会重复使用同一个对象:你已经要求一个新对象,所以它会创建一个新对象。
(在创建空字符串方面存在一个小角点情况,其中new
运算符恰好返回对现有对象的引用,但您通常可以忽略它。)
答案 1 :(得分:3)
不,它会创建一个新的。 C#/ .Net GC不会重用现有对象,只会销毁它们。
你所说的是一个对象池;如果你想利用这个概念,你必须自己实现这个功能,或找到一个现有的库。但“新”仍将只创建一个新对象。
答案 2 :(得分:0)
简而言之,C#不会重复使用任何对象。